객체지향 프로그래밍 II


1. 상속(inheritance)


1-1 상속의 정의와 장점

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

코드의 재사용성을 높이고 코드의 중복을 제거한다.


조상 클래스 - 부모(Parent)클래스, 상위(super)클래스, 기반(base)클래스

자손 클래스 - 자식(child)클래스, 하위(sub)클래스, 파생된(derived)클래스


ex)

class Parent{}

class Child extends Parent{}


- 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다.

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

- 자손 클래스의 인스턴스를 생성하면 조상 클래스의 멤버와 자손 클래스의 멤버가 합쳐진 하나의 인스턴스로 생성된다.



1-2 클래스간의 관계 - 포함관계

클래스간의 포함관계를 맺어 주는 것은 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것을 뜻한다.


ex)

class Point{

int x;

int y;

}


class Circle{

Point c = new Point();

int r;

}


Circle에 Point의 x,y좌표를 포함시켰다.


1-3 클래스간의 관계 결정하기

간단히 is-a 와 has-a 로 결정한다.


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

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


두번째 문장이 더 옳다는 것은 명백하다. 따라서 둘은 포함관계다.


상속관계 '~은 ~이다.(is~a)'

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


1-4 단일 상속(single inheritance)

다른 객체지향언어인 C++에서는 여러 조상으로부터 상속받는 것을 허용하지만 자바에서는 단일 상속만을 허용한다.

부모->자손1->자손2->자손3 O

부모1->자손1 && 부모2->자손1 X



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

모든 클래스 상속계층도의 최상위에 있는 조상클래스이다.

컴파일러가 모든 클래스에 자동적으로 'extends Object'를 추가하여 Object클래스로부터 상속받도록 한다. 다만 이미 상속을 받는 클래스에는 추가되지 않으며, 조상의 조상을 거슬러 올라가다보면 최상위에 Object클래스가 나올 뿐이다.




Posted by Hearthole
,