인터페이스
package stars1;
// 인터페이스는 추상 클래스와 유사
// 다른점 : 추상 메서드만 존재가능
// 동적 바인딩의 통로로만 사용
// 메서드에 public abstract를 생략가능
// 제작자와 이용자의 약속 - 키보드에서 a를 누르면 작동원리를 몰라도 컴퓨터에 a가 입력된다
// 프로토콜 : 동등한 관계의 상호 협의하에 이루어진 약속
// 인터페이스 : 제작자가 사용법만 알려주고 이용자가 사용하는 식의 약속
public interface Behavior {
public abstract void move();
public void repair();
void attack(Behavior unit);
public String getName();
public int getHp();
public void setHp(int hp);
}
추상클래스
package stars1.protoss;
import stars1.Behavior;
public abstract class Protoss implements Behavior {
// 움직임과 쉴드 치료는 프로토스 유닛 공통이기 때문에 추상 클래스에 바로 만들어준다
// 이렇게 만든 공통 메서드들은 구체클래스들에 구현하지 않아도 되서 어댑터 역할도 한다
@Override
public void move() {
System.out.println("이동");
}
@Override
public void repair() {
System.out.println("쉴드 치료");
}
public static void upgrade() {
Zealot.attack++;
Dragoon.attack++;
System.out.println("프로토스 업그레이드 완료");
}
}
일반 클래스
package stars1.protoss;
import stars1.Behavior;
public class Zealot extends Protoss {
private String name;
private int hp;
private int sh; // 보호막
public static int attack = 10;
public Zealot(String name) {
this.name = name;
this.hp = 100;
this.sh = 100;
}
@Override
public void attack(Behavior unit) {
unit.setHp(unit.getHp() - attack);
System.out.println(unit.getHp());
}
@Override
public int getHp() {
return hp;
}
@Override
public void setHp(int hp) {
this.hp = hp;
}
@Override
public String getName() {
return name;
}
}
메인
package stars1;
import stars1.protoss.Dragoon;
import stars1.protoss.Protoss;
import stars1.protoss.Zealot;
public class StartGame {
public static void move(Behavior b) {
b.move();
}
public static void repair(Behavior b) {
b.repair();
}
public static void attack(Behavior b1, Behavior b2) {
System.out.println(b1.getName() + "이 " + b2.getName() + "을 공격했습니다.");
System.out.println(b2.getName() + "의 현재 체력");
b1.attack(b2);
}
public static void main(String[] args) {
Protoss.upgrade();
Zealot z1 = new Zealot("질럿1");
Zealot z2 = new Zealot("질럿2");
Dragoon d1 = new Dragoon("드라군1");
attack(z1, d1);
repair(z1);
}
}
'Programming Language > Java' 카테고리의 다른 글
오라클 SELF JOIN (0) | 2020.04.02 |
---|---|
자바 인터페이스의 변수와 함수 (0) | 2020.03.31 |
자바 추상클래스 활용 / 메서드 작동 순서 / 어댑터 (0) | 2020.03.31 |
이클립스 lombok 롬복 (자동 생성자, 자동 게터 세터) (0) | 2020.03.31 |
이클립스 계층별로 패키지 정리 (0) | 2020.03.31 |