다형성(polymorphism)
- 다형성? 여러가지 형태를 가질 수 있는 능력
- 조상 타입 참조 변수로 자손 타입 객체를 다루는 것
Tv t = new SmartTv(); // 타입 불일치? OK!
- 다형성의 장점
- 다형적 매개변수
- 참조형 매개변수는 메서드 호출 시, 자신과 같은 타입 또는 자손 타입의 인스턴스를 넘겨줄 수 있다.
- 하나의 배열로 여러 종류의 객체 다루기
- 조상 타입의 배열에 자손들의 객체를 담을 수 있다.
- 다형적 매개변수
- 필드는 타입을 따른다.
- 자식에 오버라이드 되었어도 타입이 부모면 부모의 값을 따른다.
- 메서드는 오버라이드되면 자식을 따른다.
super.getA();
으로 super를 쓰면 부모 메서드를 호출한다.
객체와 참조 변수의 타입이 일치, 불일치할 때의 차이
- 참조 변수로 사용할 수 있는 멤버의 개수가 달라진다.
- 아래 두 클래스가 있다.
class Tv {
// 멤버 5개
boolean power;
int channel;
void power() {..}
void channelUp() {..}
void channelDown() {..}
}
class SmartTv extends Tv {
// 부모 멤버 5개 + 자신 멤버 2개 = 멤버 7개
String text;
void caption() {..}
}
SmartTv s = new SmartTv();
참조 변수와 인스턴스 타입 일치Tv t = new SmartTv();
조상 타입 참조 변수로 자손 타입 인스턴스 참조
자손 타입의 참조 변수로 조상 타입의 객체를 가리킬 수 없다
- 가리키는 객체의 멤버 개수보다 타입의 멤버 개수가 더 많으면 안 된다.
Tv t = new SmartTv();
허용. OKSmartTv s = new Tv();
불가능
'☕ JAVA' 카테고리의 다른 글
[Java] 매개 변수의 다형성 (0) | 2024.05.30 |
---|---|
[Java] 참조 변수의 형 변환과 instanceof (0) | 2024.05.28 |
[Java] 접근 제어자(access modifier) (0) | 2024.05.26 |
[Java] 상속 - 생성자 super()와 참조 변수 super (0) | 2024.05.25 |
[Java] 클래스 간의 관계(상속 관계, 포함 관계) (0) | 2024.05.24 |