///////
Search

13_다형성_이도현

다형성

객체들의 타입이 다르면 똑같은 메시지가 전달되더라도 서로 다른 동작을 하는 것.
하위 객체를 상위 클래스 변수에 대입하는 것 *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.
기본적으로는 자식 = 부모 허용하지 않음