다형성
•
객체들의 타입이 다르면 똑같은 메시지가 전달되더라도 서로 다른 동작을 하는 것.
•
하위 객체를 상위 클래스 변수에 대입하는 것 *upcasting
•
부모 클래스 변수로 자식 클래스 객체를 참조
•
다형성을 이용하면 훨씬 넓은 범위의 객체를 받을 수 있다.
다형성 예제
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 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();
}
Java
복사
메소드 오버라이딩
•
조상 클래스로부터 상속받은 메소드의 내용을 변경하는 것
•
오버라이딩 된 메소드를 인스턴스 외부에서 호출하는 방법은 없다. 그러나 인스턴스 내부에서는 키워드 super를 이용해 호출 가능
•
메소드 오버로딩과의 차이
◦
메소드 오버로딩 : 새로운 메소드를 정의하는 것 (new)
◦
메소드 오버라이딩 : 상속받은 메소드의 내용을 변경하는 것 (change, modify)
// 메소드 오버라이딩 예제
class Cake { //부모클래스
public void yummy() {
System.out.println("Yummy Cake");
}
}
@override
class CheeseCake extends Cake { //cheeseCake 클래스 : 자식 클래스
public void yummy() { // chesseCake의 yummy 메소드가 Cake의 yummy 메소드를 오버라이딩
System.out.println("Yummy Cheese Cake");
}
}
public static void main(String[] args) {
Cake c1 = new CheeseCake();
CheeseCake c2 = new CheeseCake();
c1.yummy();
c2.yummy();
}
Java
복사
요약 : 기억해야 할 세 가지!
1.
부모 = 자식
2.
오버라이딩은 자식 것으로
3.
기본적으로는 자식 = 부모 허용하지 않음