Java 상속(Inheritance)

nathan·2021년 12월 30일
0

JAVA

목록 보기
14/45

상속(Inheritance)

  • 기존의 클래스로 새로운 클래스를 작성하는 것.(코드의 재사용)
  • 두 클래스를 부모와 자식으로 관계를 맺어주는 것.
  • 자손은 조상(부모, 부모의 부모 등)의 모든 멤버를 상속받는다.(생성자, 초기화 블럭 제외)
  • 자손의 멤버 개수는 조상보다 적을 수 없다.(같거나 많다.)
  • 자손의 변경은 조상에 영향을 미치지 않는다.

class 자식클래스 extends 부모클래스{
// ...
}

class Parent { }
class Child extends Parent {
   // ... 
}

public class EX7_1 {
    public static void main(String[] args) {
        Tv tv = new Tv();
        tv.channel = 10;
        tv.channelDown();
        System.out.println(tv.channel);

        SmartTv stv = new SmartTv();
        stv.channel = 10;
        stv.channelUp();
        System.out.println(stv.channel);
        stv.caption = true;
        stv.displayCaption("안녕하세요");
    }
}

class Tv{
    boolean power;
    int channel;

    void power(){
        power = !power;
    }

    void channelUp(){
        ++channel;
    }

    void channelDown(){
        --channel;
    }
}

class SmartTv extends Tv{
    boolean caption;
    void displayCaption(String text){
        if(caption){
            System.out.println(text);
        }
    }
}

단일 상속(Single Inheritance)

  • Java는 단일 상속만을 허용한다.(C++은 다중 상속을 허용함)

    class TvDVD extends Tv, DVD{ // error : 조상은 하나만 허용
    // ...
    }

  • 인터페이스를 이용하면 클래스 간 충돌을 방지하면서 다중 상속과 같은 효과를 낼 수 있다.

  • 인터페이스를 이용하지 않고 다중 상속의 효과를 내는 방법

    • 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다.
class MyTv{
    boolean power;
    int channel;

    void power(){power = !power;}
    void channelUp(){ ++channel;}
    void channelDown(){ --channel;}
}

class DVD{
    boolean power;

    void power(){power = !power;}
    void play(){/* 내용 생략 */}
    void stop(){/* 내용 생략 */}
    void rew(){/* 내용 생략 */}
    void ff(){/* 내용 생략 */}

}

class TvDVD extends Tv{
    DVD dvd = new DVD();

    void play(){ // 껍데기를 만들어주어 인스턴스 레벨에서 바로 사용할 수 있게 한다.
        dvd.play();
    }

    void stop(){
        dvd.stop();
    }

    void rew(){
        dvd.rew();
    }

    void ff(){
        dvd.ff();
    }

}   

Object 클래스 - 모든 클래스의 조상

  • 부모가 없는 클래스는 자동적으로 Object 클래스를 상속받게 된다.(컴파일러가 자동으로 추가함)
  • 따라서 모든 클래스는 Object 클래스에 정의된 11개의 메서드를 상속받는다.
    • toString(), equals(Object obj), hashCode(), ...
profile
나는 날마다 모든 면에서 점점 더 나아지고 있다.

0개의 댓글