
오늘의 code
F1 f= new F2();
S1 s = new F2();
S2 s2 = new S1();
S1 s1 = new S2();
"오늘의 code"와 같은 코드가 있을때
위의 보기중 틀린 것은 어느 것인가?
상황 1.
F1 f = new F2();
F2는 인터페이스 F1을 구현한 구현체 이므로,
F1 타입의 참조변수에 F2 타입의
객체 주소를 대입할수 있다.
---> 다형성
상황 2.
S1 s = new F2();
F2는 F1의 구현체이나, S1또한
상속받기 때문에
S1 타입의 참조변수 s에 F2 타입의
객체 주소를대입할수 있다.
---> 다형성
상황3.
S2 s2 = new S1();
S2은 S1을 상속받는 자손 타입이다.
그러므로 자손 타입의 참조변수에
부모 타입의 객체 주소를 대입할수 없다.
---> 규칙 위반
상황4.
S1 s1 = new S2();
S2는 S1을 상속받는 자손 타입이다.
S1 타입의 참조변수 s1에 S2 타입의
객체주소를 대입할수 있다.
---> 다형성
F1 f= new F2(); // F2는 F1을 구현 했으므로 대입가능
S1 s = new F2(); // F2는 S1의 자손타입 이므로 대입가능
S2 s2 = new S1(); // S1은 S2의 부모타입 이므로 대입불가
S1 s1 = new S2(); // S2는 S1의 자손타입 이므로 대입가능
정리하면 위와 같다.
결론
자손 타입 참조변수에
부모타입 객체를 대입할수 없다.
---> 대입하면 컴파일 에러 발생