상속이란
기존 클래스를 재사용하여 새로운 클래스를 작성하는 것
상속의 장점
조상 클래스 - 부모(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 { }
클래스 | 클래스의 멤버 |
---|---|
Parent | age |
Child | age |
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) 책으로 공부하고 정리한 내용 입니다.