본문 바로가기
카테고리 없음

[Java] 참조변수 - 2

by seohan1010 2024. 5. 18.

 

오늘의 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의 자손타입 이므로 대입가능 

 

정리하면 위와 같다.

 

 

결론

자손 타입 참조변수에

부모타입 객체를 대입할수 없다.

---> 대입하면 컴파일 에러 발생