class Hello{
public Hello(String.msg){
System.out.println(msg);
}
public Hello(){
this("Hello");
// System.out.println("Hello");
}
}
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 u1 = navy;
Unit u3 = airforce;
u1.attack();
u2.attack();
u3.attack();
- 추가적으로 구현한 기능은 사용할 수 없게 되므로 원래의 기능을 다시 사용할 수있는 방법이 필요해졌다.
//부모 클래스가 가지고 있는 기능이 아니므로 에러
u1.tank();
u2.nucleus();
u3.bomning();
Child child = (Child)parent;
ChildClass child1 = new ChildClass();
ParentClass parent1 = child1; // 암묵적 형변환
ChildClass child2 = (ChildClass) parent1;
Army army1 = new Army(); // 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;
-> 불가능한 두가지 경우 문법적인 오류는 없기 때문에, 이클립스에서는 에러를 검출하지 못한다.
하지만 프로그램을 실행시켰을 경우에는 에러가 발생한다.