15-1 상속을 위한 두 클래스의 관계

(어떠한 경우에 상속 관계로 묶는것이 좋은가?)

상속을 하면 하위 클래스는 상위 클래스의 모든 특성을 지니게 된다.

더하여 하위 클래스는 자신만의 추가적인 특성도 더하게 된다.

상속과 IS-A 관계

..은 ..이다. 의 관계

ex) 모바일폰 vs 스마트폰

<aside> ⚙ 모바일폰을 스마트폰이 상속한다.

class 스마트폰 extends 모바일폰 {…}

</aside>

⇒ 상속 관계에 있는 두 대상은 IS-A 관계를 가져야 한다.

ex) A is a B = A는 일종의 B이다. 스마트폰 is a 모바일폰 = 스마트폰은 일종의 모바일폰이다

Is - A 관계를 갖지 않는 두 클래스가 상속으로 연결된 경우 잘못된 상속임

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);
    }
}
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);
    }
}

A = MobilePhone / B = SmartPhone

A클래스가 가지고있는 기능을 B는 다 가지고있고 +a의 기능을 더 가지고있다.