자바의 정석 - 기초편

☆☆☆ 다형성 (polymorphism)

ODaram 2022. 9. 7. 17:25

▶ 다형성 (polymorphism)

   -  여러가지 형태를 가질 수 있는 능력

   -  조상 타입 참조 변수로 자손 타입 객체를 다루는 것

 

   - 객체와 참조변수의 타입이 일치할 때와 일치하지 않을 때의 차이?

   SmartTV  s = new SmartTv();  // 참조 변수인스턴스의 타입일치
   TV           t = new SmartTv();    // 조상 타입 참조변수로 자손 타입 인스턴스 참조 ; 불일치도 OK

   ex) 스마트 티비를 스마트티비 리모컨( 기능 7개 )으로 사용한다면 모든 기능( 기능 7개 )을 사용할 수 있음

                                  티비 리모컨( 기능 5개 )으로 사용한다면 일부 기능만 사용 가능함 (리모컨에 있는 기능까지만 가능)

 

스마트 티비

   - 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다.

    TV              t  = new SmartTv();     // OK. 허용                (  TV = 조상 , SmartTv = 자손  ) 
    SmartTv     s = new TV();              // 에러. 허용 안 됨.    (  SmartTv = 자손 , TV = 조상  ) 

   ex) 두번째 코드의 경우 스마트 티비 리모컨( 기능 7개 )로

         일반 티비 (기능 5개 )를 동작 하려고 하는 것이기 때문에 사용 불가

          멤버 개수 > 실제 개수 : OK        //      멤버 개수 < 실제 개수 : 에러

일반 티비 (우)


 정리

Q. 참조 변수의 타입은 인스턴스의 타입과 반드시 일치해야 하나?

 A. 아니다. 일치하는 것이 보통이지만 일치하지 않을 수도 있음

 SmartTV   s  =  new SmartTV();       // 참조 변수와 인스턴스의 타입이 일치
 TV             t   = new SmartTV();       // 조상 타입 참조변수로 자손 타입 인스턴스 참조 --> 다형성

Q. 참조 변수가 조상타입일 때와 자손타입일 때의 차이?

 A. 참조변수로 사용할 수 있는 멤버의 갯수가 달라짐.

 

Q. 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 있나?

 A. 아니다. 허용되지 않음.

TV                t   =  new SmartTV();          // OK. 허용.           ( TV = 조상(5개)   <  SmartTV = 자손(7개) )
SmartTV      s   = new TV();                   // 에러. 허용 안 됨. ( SmartTV = 자손(7개) > TV = 조상(5개)    )

 

'자바의 정석 - 기초편' 카테고리의 다른 글

이클립스 콘솔 한글깨짐  (0) 2022.09.13
캡슐화  (0) 2022.08.31
접근 제어자  (0) 2022.08.24
제어자, static, final, abstract  (0) 2022.08.23
import문 /static import문  (0) 2022.08.23