상속

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

코드의 재사용성을 높이고 코드의 중복제거 => 유지보수 편리

클래스의 이름뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends' 를 써준다.

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

 

조상 클래스와 자손 클래스

class Parentclass Child는 서로 상속 관계에 있다고 하며

상속해주는 클래스를 '조상 클래스'라 하고 상속 받는 클래스를 '자손 클래스'라 한다

 

● 자손 클래스는 조상 클래스의 모든 멤버를 상속받기 떄문에,  Child클래스는 Parent클래스의 멤버들을 포함한다.

● 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.

상속 예제)

class Tv {
    boolean power;       //전원상태 (on/off)
    int channel;             //채널
    
    void power() { power = !power; }
    void channelUp() { ++channel; }
    void channelDown() { --channel; }
}

class SmartTv extends Tv {	  //SmartTv는 Tv에 캡션(자막)기능을 추가
	boolean caption;     	  //캡션상태(on/off)
        void displayCaption(String text) {
    	if (caption) {    	 //캡션 상태가 true 일떄만 text 보여줌
        	system.out.println(text);
        }
    }
}
--------------------------------------------------------------------------
SmartTv에는 Tv의 기능을 모두 가지고 있어야 하기 때문에
Tv클래스로부터 상속받고 기능을 추가하여 SmartTv클래스를 작성하였다.

 

포함관계

상속 이외에도 클래스를 재사용하는 또 다른 방법이다.

한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것을 뜻한다.

class Circle {
    int x;		//원점의 x좌표
    int y;		//원점의 y좌표
    int z;		//반지름
}    

class Point {
    int x;		//x좌표
    int y;		//y좌표

=> 클래스 Circle와 Point는  x,y가 중복된다. 
-----------------------------------------

Point클래스를 재사용해서 Circle클래스를 작성한다면 아래와 같다.

class Circle {
	Point c = new Point(); // 원점 (포함관계로 재사용함)
    int r;
}

 

클래스 간의 관계 설정하기

클래스를 가지고 문장을 만들었을 때 아래와 같은 문장중에 성립하는 쪽으로 정해준다.

상속관계 => ~은 ~이다. (is-a)

포함관계 => ~은 ~을 가지고 있다. (has-a)

ex) 1. 원(Circle)은 점(Point)이다. - Circle is a Point

      2. 원(Circle)은 점(Point)을 가지고 있다.. - Circle has a Point

두 문장을 비교해 보면 2.번 문장이 더 옳다는 것을 알 수 있다.

따라서 Circle클래스와 Point클래스 간의 관계는 상속관계 보다 포함관계로 맺어준다.