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 Tank extends Unit {
void move(int x, int y) { }
void changeMode() {}
}
class Dropship extends Unit {
void move(int x, int y) { }
void load() {}
void unload() {}
}
Unit[] group = new Unitp[3];
group[0] = new Marine();
group[1] = new Tank();
group[2] = new Dropship();
for(int i=0; i < group.length;i++)
group[i].move(100, 200)
Object[] group new Object[3];
group[0] = new Marine();
group[1] = new Tank();
group[2] = new Dropship();
for(int i=0; i < group.length;i++)
group[i].move(100, 200) // 에러!!! Object 클래스에 move메서드가 정의 되어 있지 않다.
Ex.7_10
public class Ex7_10 {
public static void main(String[] args) {
Unit[] group = { new Marine(), new Tank(), new Dropship() };
// 위 코드와 네 줄의 코드는 같은 의미
// 위 코드는 배열의 생성과 초기화를 한 번에 한 것
// Unit[] group = new Unitp[3];
// group[0] = new Marine();
// group[1] = new Tank();
// group[2] = new Dropship();
for (int i = 0; i < group.length; i++)
// group의 타입은 Unit[]/ group[0], group[1], group[2] 의 타입은 Unit
group[i].move(100, 200);
//group[0].move(100, 200); Marine 객체의 move(100,200) 을 호출
//group[1].move(100, 200); Tank 객체의 move(100,200) 을 호출
//group[2].move(100, 200); Dropship 객체의 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) {
System.out.println("Marine[x=" + x + ",y=" + y + "]");
}
void stimPack() { /* 스팀팩을 사용한다. */ }
}
class Tank extends Unit { // 탱크
void move(int x, int y) {
System.out.println("Tank[x=" + x + ",y=" + y + "]");
}
void changeMode() { /* 공격모드를 변환한다. */ }
}
class Dropship extends Unit { // 수송선
void move(int x, int y) {
System.out.println("Dropship[x=" + x + ",y=" + y + "]");
}
void load() { /* 선택된 대상을 태운다. */ }
void unload() { /* 선택된 대상을 내린다. */ }
}
GregorianCalendar cal = new GregorianCalendar(); // 구체적Calendar cal = Calendar.getInstance(); // 추상적