상속계층도를 따라 내려 갈수록 세분화되며 올라갈수록 공통 요소만 남게 된다.
public class abstractClassExam {
public static void main(String[] args) {
Unit[] group = new Unit[3];
group[0] = new Marine();
group[1] = new SiegeTank();
group[2] = new Dropship();
// or
// Unit[] group = {new Marine(), new SiegeTank(), new Dropship()};
for(int i = 0; i < group.length; i++) {
group[i].move(100,200);
}
}
}
abstract class Unit {
int x, y;
abstract void move(int x, int y);
void stop() {}
}
class Marine extends Unit {
void move(int x, int y) {};
void stimPack() {};
}
class SiegeTank extends Unit {
void move(int x, int y) {};
void siegeMode() {};
}
class Dropship extends Unit {
void move(int x, int y) {};
void drop() {};
void lift() {};
}
각 클래스의 공통부분으로 Unit클래스를 정의하고 이로부터 상속받고있다.
move메서드가 추상메서드로 선언된 것은 Marine, SiegeTank는 지상 유닛, Dropship은 공중 유닛으로 move메서드의 실제 구현 내용은 다르겠지만 모든 유닛은 이동할 수 있어야 하므로 반드시 필요하며 자신의 클래스에 맞게 구현하면 된다.
'Java의 정석' 카테고리의 다른 글
인터페이스의 상속, 구현 (0) | 2022.04.20 |
---|---|
인터페이스(interface) (0) | 2022.04.19 |
추상 메서드(abstract method) (0) | 2022.04.15 |
추상 클래스(abstract class) (0) | 2022.04.14 |
객체를 배열로 다루기 (0) | 2022.04.13 |