하나의 객체가 여러가지의 타입을 가질 수 있는 것
다형성은 상속, 추상화와 함께 객체 지향 프로그래밍에서 중요한 특징 중 하나이다.
Tv => 부모 타입, SmartTv => 자식 타입 일때
부모 타입 참조 변수로 자식 타입 객체를 다루는 것
ex)
Tv t = new SmartTv();
단, 자식 타입의 참조변수로 부모 타입의 객체를 가리킬 수 없다.
Tv t = new SmartTv(); // 허용
SmartTv t = new Tv(); // 허용X
정리하자면
- 같은 타입의 인스턴스 참조 (O)
- 부모 -> 자식 인스턴스 참조 (O)
- 자식 -> 부모 인스턴스 참조 (x)
유지보수가 쉽다.
- 여러 객체를 하나의 타입으로 관리 할 수 있기 때문에 코드 관리가 편해져 유지보수가 쉽다.
결합도 하락
- 클래스간의 의존성이 줄어들어 결합도가 낮아지고 독립성이 강해진다.
class MobilePhone {
protected String number;
public MobilePhone(String num) {
number = num;
}
public void answer() {
System.out.println("Hi~ from " + number);
}
}
class SmartPhone extends MobilePhone {
private String androidVer;
public SmartPhone(String num, String ver) {
super(num);
androidVer = ver;
}
public void playApp() {
System.out.println("App is running in " +
androidVer);
}
}
public class dkd {
public static void main(String[] args) {
SmartPhone ph1 =
new SmartPhone("010-555-777",
"Nougat");
MobilePhone ph2 =
new SmartPhone("010-999-333",
"Nougat");
ph1.answer();
ph1.playApp();
System.out.println();
ph2.answer();
// ph2.playApp();
}
}
Hi~ from 010-555-777
App is running in Nougat
Hi~ from 010-999-333