자바 객체 지향 프로그래밍 - 상속

계리·2022년 10월 6일
0
post-thumbnail

상속이란
기존 클래스를 재사용하여 새로운 클래스를 작성하는 것

상속의 장점

  • 보다 적은 양의 코드로 새로운 클래스를 작성
  • 코드를 공통적으로 관리할 수 있어 코드의 추가 및 변경이 용이하다
  • 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다.

조상 클래스 - 부모(parent)클래스, 상위(super)클래스, 기반(base)클래스
자손 클래스 - 자식(child)클래스, 하위(sub)클래스, 파생된(derived)클래스

상속관계도

상속을 할 때 키워드는 아래 코드와 같이 'extends'를 붙인 후 상속 받을 클래스를 명시해주면 된댜.

class Parent { }
cclass Child extends Parent { }

만일 Parent클래스에 age라는 정수형 변수를 멤버변수로 추가하면 자손 클래스는 조상의 멤버를 모두 상속받기 때문에 Child클래스는 자동적으로 age라는 멤버변수가 추가된 것과 같은 효과를 얻는다.

class Parent {
	int age;
}

class Child extends Parent { }
클래스클래스의 멤버
Parentage
Childage
class Parent {
	int age;
}

class Child extends Parent {
	void play() {
    	System.out.println("놀자~");
    }
}

Child클래스에 새로운 코드가 추가되어도 조상인 Parent클래스는 아무런 영향을 받지 않는다. 조상클래스가 변경되면 자손클래스는 자동적으로 영향을 받지만 자손 클래스가 변경되는 것은 조상클래스에 아무런 영향을 주지 못하는 것을 확인할 수 있다.

  • 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다.
  • 자손 클래스의 멤버 개수는 조상 클래스보다 항상 많거나 같다.

예시1

class Tv{
    boolean power;  // 전원상태(on/off)
    int channel;    // 채널

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

class CaptionTv extends Tv{
    boolean caption;    // 캡션상태(on/ofF)
    void displayCaption(String text){
        if(caption){    // 캡션 상태가 on(true)일 때만 text를 보여준다.
            System.out.println(text);
        }
    }
}

public class CaptionTyTest {
    public static void main(String[] args){
        CaptionTv ctv = new CaptionTv();
        ctv.channel = 10;                           // 조상 클래스로부터 상속받은 멤버
        ctv.channelUp();                            // 조상 클래스로부터 상속받은 멤버
        System.out.println(ctv.channel);
        ctv.displayCaption("Hello, World");
        ctv.caption = true;                         // 캡션(자막) 기능을 켠다.
        ctv.displayCaption("Hello, World");
    }
}

CaptionTv클래스에서 int channel 변수와, channelUp() 메서드를 선언하지 않았지만 Tv클래스에서 해당 변수와 메서드를 상속을 받았기 때문에 사용 가능하다.


※ 참고 문헌

남궁성, 『Java의 정석 3nd Edition』, 도우출판(2016) 책으로 공부하고 정리한 내용 입니다.

profile
gyery

0개의 댓글