Hyunebee
다형성 본문
다형성
객체 지향에서 다형성은 여러 가지 형태를 가질 수 있는 능력을 의미한다. 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 구현하였다.
class Tv{
boolean power;
int channel;
void power(){
}
void channelUp(){
channel++;
}
void channelDown(){
channel--;
}
}
class CaptionTv extends Tv{
String context;
void caption() {
}
}
Tv t = new Tv(); < 생성된 인스턴스는 인스턴스의 타입과 일치하는 타입의 참조변수 사용
CaptionTV cTv = new CaptionTv();
Tv t = new Caption(); < 같은 타입의 참조변수 뿐만 아니라 자식타입의 참조변수 도 사용할 수 있다.
그럼 CaptionTv cTv = new CaptionTv()와 다르점은 무엇일까 이 둘은 같은 타입의 인스턴스지만 참조변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라진다 Tv t = new Caption()는 CaptionTv의 context와 caption()을 사용할 수 없다.
하지만 CaptionTv cTv = new Tv()는 불가능하다. CaptionTv객체가 가지는 멤버가 더욱 많기 때문이다.
참조 변수의 탕비이 참조변수가 참조하고 있는 인스턴스에서 사용할 수 있는 변수의 갯수를 결정한다.
즉 부모타입의 참조변수로 자손타입의 인스턴스를 참조할 수 이지만 자식 타입의 참조 변수로 부모 타입의 인스터스를 참조할 수 없다.
참조변수와 형변환
참조변수의 형변환은 서로 상속관계에 있는 클래스에서만 가능하다.
자손타입 -> 부모타입 : 업캐스팅(형 변환 생략가능)
자손타입 <- 부모타입 : 다운캐스팅(형변환을 생략할 수 없다.)
여기서 중요한것은 형변환은 참조변수의 타입을 변경하는 것이지 인스턴스를 변환하는게 아니기 때문에 참조변수의 형변환은 인스턴스에 영향을 미치치 않는다. 단지 참조변수의 형변환을 통해서 인스턴스에서 사용할 수 있는 멤버의 갯수를 조절하는 것이다.
만약 부모과 자손타입의 멤버 변수가 중복으로 정의된 경우는?
부모타입의 맴버변수를 사용한다면 부모타입의 멤버변수가 사용되고 자손타입의 맴버변수를 사용한다면 자손타입의 맴버변수가 사용된다.
'Java > Java의 정석' 카테고리의 다른 글
| Collection Framework (0) | 2022.03.06 |
|---|---|
| abstract, interface (0) | 2022.03.06 |
| 제어자 (0) | 2022.03.03 |
| 오버라이딩 (0) | 2022.03.03 |
| 클래스간 관계 결정 - 상속과 포함 (0) | 2022.03.03 |