1. 객체 형변환이란?
Parent parent = new Child();2. 객체간의 암묵적 형변환
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;
-> 전부 형변환이 가능하다.
3. 암묵적 형변환과 메서드 오버라이드
암묵적 형변환은 부모를 상속받은 자식 객체의 기능을 부모에게 물려받은 기능만 사용하도록 제한한다.
암묵적 형변환이 발생하면 오버라이드된 기능만 사용가능하고 추가적으로 구현한 기능은 사용할 수 없다.
주의할 점은 기능의 제한이지 기능의 변경은 아니라는 것이다.
상속관계의 객체를 부모형태로 변환하면 클래스의 종류를 구분하지 않고 일관된 기능을 호출할 수 있다.
객체가 상위클래스 형태로 형변환 되더라도 Override된 자신의 기능은 잃지 않는다.
Unit u1 = army;
Unit u2 = navy;
Unit u3 = airforce;
u1.attack();
u2.attack();
u3.attack();
추가적으로 구현한 기능은 사용할 수 없게 되므로 원래의 기능을 다시 사용할 수 있는 방법이 필요해 졌다.

-> 암묵적 형변환을 하여 Unit클래스에 있는 attack();은 가능하지만 bombing등 자식클래스에 있던 기능은 사용이 불가능하다.
4. 명시적 형변환
ChildClass child = (ChildClass) parent;
-> 위에 암묵적 형변환에서 사용하지 못한 기능들을 명시적 형변환을 통해 사용할 수 있다.
5. 명시적 형변화의 조건
객체가 최초 생성될 때 자식 클래스 형태로 생성되고, 부모형태로 암묵적 형변환이 된 상태를 다시 원래의 자식 클래스 형태로 되돌릴 경우에만 가능하다.
ChildClass chil1 = new ChildClass();
ParentClass parent = child1;
-> 암묵적 형변환
ChildClass child2 = (ChildClass)parent;
-> 명시적 형변환
6. 명시적 형변환2
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;
-> 최초 생성된 것과 다른 형식으로 변환하는 것은 불가능하다.