Parent parent = new Child();
A a1 = new B();
A a2 = new X();
----------------
A a3 = new C();
A a4 = new Y();
-----------------
B b1 = new C();
X x1 = new Y();
------------------
C c = new C();
B b2 = c;
------------------
Y y = new Y();
X x2 = y;
주의할 점은 기능의 제한이지 기능의 변경은 아니라는 것이다.
Unit u1 = army;
Unit u2 = navy;
Unit u3 = airforce;
u1.attack();
u2.attack();
u3.attack();
ChildClass child = (ChildClass) parent;
ChildClass child1 = new ChildClass(); // 자식 클래스 형태로 생성
ParentClass Parent = child1; // 암묵적 형변환
ChildClass child2 = (ChildClass)parent; // 명시적 형변환
Army army1 = new Army();
Unit u = army1;
Army army2 = (Army)u;
Unit u = new Navy():
Navy navy = (Navy)u;
Unit u = new Unit();
Army army = (Army)u;
Army army = new Army();
Unit u = army;
Navy navy = (Navy)u;
int[] data = new int[3];
Army[] data = new Army[3];
data[0] = 1; // 일반 데이터 형
data[1] = 2;
...
data[0] = new Army(); // 객체 배열
data[1] = new Army();
...
객체 형변환
-> 같은 부모 클래스에서 파생된 서로 다른 자식 클래스의 객체들은 부모 형태로 암묵적 형변환 되어 일관된 형식으로 사용 가능하다.
객체 배열
-> 동일한 클래스의 객체는 배열로 묶어서 여러 개를 한꺼번에 제어할 수 있다.
Unit[] unit = new Unit[3];
unit[0] = new Army(); // 배열의 요소 할당 과정에서 암묵적 형변환이 이루어진다.
unit[1] = new Navy();
unit[2] = new AirForce();
for( int i=0; i<unit.length; i++ ){
unit[i].attack();
}
public class Main02 {
public static void main(String[] args) {
// 부대지정
Unit[] units = new Unit[5];
units[0] = new AirForce("공군1호");
units[1] = new AirForce("공군2호");
units[2] = new Navy("해군1호");
units[3] = new Army("육군1호");
units[4] = new Army("육군2호");
// 부대 일곽 공격 attack()
// tank(), nucleus(). bombing() 각각 호출하는 로직을 추가
for( int i=0; i<units.length; i++ ) {
units[i].attack();
if( units[i] instanceof Army ) {
Army a = (Army)units[i];
a.tank();
}else if(units[i] instanceof Navy){
Navy n = (Navy)units[i];
n.nucleus();
}else {
AirForce f = (AirForce)units[i];
f.bombing();
}
}
}
}
if( unit[0] instanceof Army ){
Army temp = (Army)unit[0];
}
if( units[i] instanceof Army ) {
Army a = (Army)units[i];
a.tank();
}else if(units[i] instanceof Navy){
Navy n = (Navy)units[i];
n.nucleus();
}else {
AirForce f = (AirForce)units[i];
f.bombing();
}
}
}