Hello

Java 다형성(polymorphism)

by 볼빵빵오춘기

다형성(polymorphism)

  • 여러 가지 형태를 가질 수 있는 능력이다.
  • 조상 타입 참조 변수로 자손 타입 객체를 다루는 것이다. [더보기 참고]
  • 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다. [더보기 - 의문점1,2 참고] 
더보기

조상 타입 참조 변수로 자손 타입 객체를 다루는 것??이라고

부모 클래스 Tv가 있고 자식클래스 SmartTv가 있다.

 

Tv의 멤버는 5개 이고

SmartTv의 멤버는 Tv에서 받은 것 5개 자기자신이 갖고있던 멤버 2개 해서 총 7개를 가지고 있다.

 

기존에 우리가 Tv객체를 다룰려면 Tv타입리모콘이 있어야 했고

SmartTv객체를 다룰려면 SmartTv타입리모콘이 있어야 한다고 했다.

 

하지만 자바에서의 다형성은

SmartTv객체를 다루기위해 Tv타입리모콘을 사용하는것처럼 타입이 불일치하는 것도 괜찮은것을 말한다.

즉 위의 상황처럼 조상 타입 참조 변수로 자손 타입 객체를 다루는 것!(=조상 자손의 관계에서만 된다는 것!)

 


 

여기서 드는 의문점1!

객체와 참조변수의 타입이 일치할 때와 일치하지 않을 때의 차이가 있나? 기능의 사용 여부의 차이가 있다. 

SmartTv s = new SmartTv(); // -- 경우1
Tv t = new SmartTv(); // -- 경우2

 

경우 1번은 SmartTv의 객체에 SmartTv 리모콘을 갖고있기때문에 기능(속성+메서드)[라고 지칭] 7가지를 다 쓸 수 있지만

경우 2번은 SmartTv의 개체에 Tv리모콘이기때문에 SmartTv의 자체 멤버 text, caption()은 사용불가이다. 일부만 사용가능한것이다.

 


여기서 드는 의문점2!

자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 있나? No. 가르킬 수 없다!

Tv t = new SmartTv(); // 가능
SmartTv s = new Tv(); // 에러. 허용 안 됨

 리모컨에는 기능이 있는데 실제 객체에 없으면 없는것 호출해서 기능이 작동하지 않는다고 생각하면된다.


정리하자면

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

A1. No 일치하는 것이 보통이지만 일치 하지 않을 수도 있다.

 

Q2. 참조변수가 조상타입일 때와 자손타입일 때의 차이는 무엇인가?

A2. 참조변수로 사용할 수 있는 멤버의 갯수가 달라진다.

 

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

A3. No. 허용되지않는다. 에러남.

 

정리하자면 부분이 이해가 가지않는다면 다형성정리부분에 더보기를 보고 이해하면된다. 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기