상속(inheritance)

HYUNBIN CHO·2021년 6월 30일
0

java

목록 보기
16/23
post-thumbnail

🔷 상속

기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것

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

🔸 조상클래스 = 부모클래스, 상위클래스, 기반클래스
🔸 자손클래스 = 자식클래스, 하위클래스, 파생된 클래스

🔷 특징

  1. 코드의 재사용성을 높인다.
  2. 코드의 중복을 제거한다.
    - 조상클래스만 변경해도 모든 자손클래스, 자손의 자손클래스에 영향을 미친다.
    - 자손클래스들의 공통 부분들은 조상클래스에서 관리, 자손 클래스들은 나머지 자신들에게 정의된 멤버만
    관리하면 된다.

➡️ 이를 통해 생산성과 유지보수를 한결 쉽게 하는데 도움을 준다.

// 부모클래스(멤버 5개)
class Tv{
    boolean power; // on/off
    int channel;

    void power(){ power != power; }
    void channelUp(){ ++channel; }
    void channelDown(){ --channel; }
}
// Tv클래스를 상속한 자식클래스(총 멤버 7개 : 부모 5개 + 자식 2개)
class CaptionTv extends Tv{
    boolean caption;
    void displayCaption(String text){
        if(caption){
            System.out.println(text);
        }
    }
}
class CaptionTvTest{
    public static void main(String args[]){
    	CaptionTv ctv = new CaptionTv();
        ctv.channel = 10;
        ctv.channelUp();
        System.out.println(ctv.channel); // 11
        ctv.caption = true;
        ctv.displayCaption("Hello World!"); // Hello World! 출력
    }
}

🔸 자손 클래스의 인스턴스를 생성하면 상속받은 조상클래스의 멤버도 같이 생성되기 때문에 따로 조상클래스의 인스턴스를 생성할 필요없이 사용할 수 있다.

🔷 포함관계와 상속관계

🔸 포함관계 : 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것
➡️ 하나의 큰 크기의 클래스를 작성하는 것 보다 단위별로 쪼개서 여러개의 클래스를 작성 후 포함관계로 사용하면 간결하게 작성할 수 있고, 재사용성도 높아진다.

class Car{
    Engine e = new Engine();
    Door[] d = new Door[4];
    ....
}

🔸 포함관계, 상속관계의 결정
- 스포츠카는 차이다. ➡️ 상속관계(꼭 필요한 경우에만 사용)
- Deck은 Card를 가지고 있다. ➡️ 포함관계

class Card{
    static final int KIND_MAX = 4;
    static final int NUM_MAX = 13;
   
    static final int SPADE = 4;
    static final int DIAMOND = 3;
    static final int HEART = 2;
    static final int CLOVER = 1;
    int kind;
    int number;
    Card(){
        this(SPADE, 1);    
    }
    ...
}
// 포함관계일 때
class Deck{
    final int CARD_NUM = 52;
    Card cardArr[] = new Card[CARD_NUM]; // Deck 클래스는 Card객체 배열을 포함한다.
    Deck(){
        int i = 0;
        for(int k = Card.KIND_MAX; k > 0; k--){
            for(int n = 0; n < Card.NUM_MAX; n++)
                cardArr[i++] = new Card(k, n+1);
        }
    }
    Card pick(int index){
        return cardArr[index];
    }
    ...
}

🔷 단일상속

자바에서는 단일 상속만을 허용한다.
➡️ 다중 상속의 단점 : 클래스간 관계가 매우 복잡해지고 상속받은 멤버간의 이름이 같은 경우, 구별할 수 없다.

🔷 Object

Object클래스 : 모든 클래스의 최상위에 있는 조상클래스

class Card{ // 컴파일러가 'extends Object' 자동으로 추가해서 Object를 상속받도록하여 컴파일한다.
    ...
}
profile
백견이 불여일타

0개의 댓글

관련 채용 정보