다형성
다형성은 상속과 함께 객체지향의 핵심 개념 중 하나이다.
상속과도 깊은 관계가 있으므로 상속에 대해서도 잘 알고 있어야 한다!!
2022.05.28 - [Programming/Java] - [JAVA] 상속(inheritance)이란? / 상속의 특징 / 상속의 장점 / 예시
[JAVA] 상속(inheritance)이란? / 상속의 특징 / 상속의 장점 / 예시
상속이란?? 상속은 객체지향의 핵심 개념 중 하나!! 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 두 클래스를 조상과 자손으로 관계를 맺어주는 것 상속의 특징 자손은 조상
puenti.tistory.com
다형성(Polymorphism)이란??
다형성이란, 여러가지 형태를 가질 수 있는 능력이다!
객체지향적인 관점에서 보면 하나의 참조변수로 여러 타입의 객체를 참조하는 것이다!!
→ 조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는 것이다!!
이해를 돕기 위해 아래의 예제를 보자
조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 했다.
예제1
class TV {
boolean power;
int channel;
void power(){ power = !power; }
void channelUp() { ++channel; }
void channelDown() { --channel; }
}
class CaptionTv extends Tv {
String text; // 캡션을 보여주기 위한 문자열
void caption() { /*생략*/ }
}
위 클래스의 관계를 살펴보자
클래스 Tv와 CaptionTv는 서로 상속 관계이다.
Tv t = new Tv();
CaptionTv c = new CaptionTv();
Tv t = new CaptionTv();
인스턴스 타입과 참조변수의 타입이 일치하는 것이 보통이지만, 서로 상속관계에 있는 클래스일 경우
조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조하도록 하는 것도 가능하다.
예제2
CaptionTv c = new CaptionTv();
Tv t = new CaptionTv();
참조변수는 다르지만 같은 인스턴스를 참조할땐 어떨까?
이 경우는 실제 인스턴스가 CaptionTv라 할지라도, 참조변수 t로는 CaptionTv의 모든 멤버를 사용할 수 없다.
→ Tv타입의 참조변수로는 CaptionTv인스턴스 중에서 Tv 클래스의 멤버들만 사용 할 수 있다.
→ 생성된 CaptionTv 인스턴스의 멤버 중에 Tv 클래스에 정의 되지 않은 멤버인 text와 caption()은 사용이 불가능하다!
※ 둘 다 같은 타입의 인스턴스지만 참조변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라진다!!!
예제3
CaptionTv c = new Tv();
자손타입 참조변수로 조상타입의 인스턴스를 참조하는 경우
→ 에러 발생, 불가능!
→ 실제 인스턴스인 Tv의 멤버 개수보다 참조변수 c가 사용할 수 있는 멤버 개수가 더 많기 때문.
※ 참조변수가 사용할 수 있는 멤버의 개수는 인스턴스의 멤버 개수보다 같거나 적어야 한다!!
'Programming > Java, Spring' 카테고리의 다른 글
[JAVA] 인터페이스란?? 인터페이스의 작성, 구현 / 인터페이스의 상속 / 인터페이스의 다형성 / 인터페이스의 장점 (0) | 2022.06.04 |
---|---|
[JAVA] 추상 클래스란? / 추상 메서드란?? / 추상 클래스의 작성 (2) | 2022.06.02 |
[JAVA] 상속(inheritance)이란? / 상속의 특징 / 상속의 장점 / 예시 (0) | 2022.05.28 |
[JAVA] 참조변수 super & 생성자 super (0) | 2022.05.24 |
[JAVA] 오버라이딩이란?? / 오버라이딩 vs 오버로드 (0) | 2022.05.21 |