*JAVA*

[java] 다형성

깐부로부터 2021. 10. 27. 22:07

- 상속을 이용한 기술

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

- ★부모타입 참조변수로 자식타입 객체를 다루는 것★

 

Tv 클래스가 조상, SmartTv클래스가  Tv클래스를 상속받았을때

1
2
3
SmartTv s = new SmartTv(); // 참조변수와 객체의 타입 일치
 
Tv t = new SamrtTv((); // 조상 타입 변수로 자손타입 객체 참조
cs

 

- 자식타입의 참조변수로 부모타입의 객체를 가리킬 수 없다.

  => 실제 사용할 수 있는(그 안의 변수, 메소드)외에

       자식타입에만 있는 변수나 메소드는 부모타입으로 호출이 불가능 하기 때문

1
2
3
Tv t = new SamrtTv((); // OK
 
SmartTv s = new SmartTv(); // Error 
cs

 

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

A. No, 일치하는 것이 보통이나, 일치하지 않을 수도 있다. (자식이 조상타입으로 변하는 것만 OK)

 

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

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

 

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

A. 아니요, 허용되지 않습니다.


참조변수의 형변환

- 사용할 수 있는 멤버의 갯수를 조절하는 것(주소값, 참조하는 객체는 하나도 안바뀜)

- 조상, 자손 관계(상속관계)의 참조변수는 서로 형변환 가능

 

조상 => 자손 : 사용 멤버의 갯수 감소 (안전) [형변환 생략 O]

자손 => 조상 : 사용 멤버의 갯수 증가 (안전하지 않음) [형변환 생략 X]

 

 

 

'*JAVA*' 카테고리의 다른 글

[java] 추상클래스(abstract)  (0) 2021.10.29
[java] instanceof  (0) 2021.10.29
[java] 오버라이딩(overriding)  (0) 2021.10.27
[java] 상속(inheritance)  (0) 2021.10.27
[java] 객체배열  (0) 2021.10.26