abstract class Unit{
int x, y;
abstract void move(int x, int y);
void stop() { System.out.println("stop!!!"); }
}
interface Fightable{ // 인터페이스의 모든 메서드는 public abstract. 예외없음
void move(int x, int y); // public abstract가 생략됨
void attack(Fightable f); // public abstract가 생략됨
}
class Fighter extends Unit implements Fightable{
// 오버라이딩 규칙 : 조상보다 접근어자가 좁으면 안된다.
// 위에 public이 없더도 붙여줘야한다.
// 여기서 접근제어자 생략 실수위험도가 높다.
public void move(int x, int y) {
System.out.println("[x="+x+", y="+y+"]이동 ");
};
public void attack(Fightable f) {
System.out.println(f+"를 공격 ");
};
}
public class FighterTest {
public static void main(String[] args) {
Fighter f = new Fighter();
f.move(100,200);
f.attack(new Fighter());
}
}
abstract class Unit{
int x, y;
abstract void move(int x, int y);
void stop() { System.out.println("stop!!!"); }
}
interface Fightable{ // 인터페이스의 모든 메서드는 public abstract. 예외없음
void move(int x, int y); // public abstract가 생략됨
void attack(Fightable f); // public abstract가 생략됨
}
class Fighter extends Unit implements Fightable{
// 오버라이딩 규칙 : 조상보다 접근어자가 좁으면 안된다.
// 위에 public이 없더도 붙여줘야한다.
// 여기서 접근제어자 생략 실수위험도가 높다.
public void move(int x, int y) {
System.out.println("[x="+x+", y="+y+"]이동 ");
};
public void attack(Fightable f) {
System.out.println(f+"를 공격 ");
};
}
public class FighterTest {
public static void main(String[] args) {
Fightable f = new Fighter(); // Fighter이었던 타입을 Fightable으로 변경
f.move(100,200);
f.attack(new Fighter());
}
}
public class FighterTest {
public static void main(String[] args) {
Unit u = new Fighter();
u.move(100,200);
u.attack(new Fighter()); // Unit에는 attact()이 없어서 호출불가
u.stop();
Fightable f = new Fighter();
f.move(100,200);
f.attack(new Fighter());
f.stop(); // Fighter에는 stop()이 없어서 호출불가
}
}
abstract class Unit{
int x, y;
abstract void move(int x, int y);
void stop() { System.out.println("stop!!!"); }
}
interface Fightable{ // 인터페이스의 모든 메서드는 public abstract. 예외없음
void move(int x, int y); // public abstract가 생략됨
void attack(Fightable f); // public abstract가 생략됨
}
class Fighter extends Unit implements Fightable{
// 오버라이딩 규칙 : 조상보다 접근어자가 좁으면 안된다.
// 위에 public이 없더도 붙여줘야한다. 여기서 접근제어자 생략 실수위험도가 높다
public void move(int x, int y) {
System.out.println("[x="+x+", y="+y+"]이동 ");
};
public void attack(Fightable f) {
System.out.println(f+"를 공격 ");
};
// 추가 부분 start
// 싸울 수 있는 상대를 불러온다.
Fightable getFightable(){ // =>>>>>> 여기의 타입!!!!!!
Fighter f = new Fighter(); // Fighter를 생성해서 반환
return f; // =>>>>>> 여기의 타입!!!!!!
}
// 추가 부분 end
}
public class FighterTest {
public static void main(String[] args) {
Fighter f = new Fighter();
Frghtable f2 = f.getFightable(); // =>>>>>> 여기의 타입!!!!!!
}
}