상속
: 기존의 클래스를 재사용하여 새로운 클래스를 작성상속 구현 방법
: 클래스 이름 뒤 상속받고자 하는 클래스의 이름을 키워드 'extends'와 함께 써 주면 됨<새로 작성하려는 클래스 이름이 Child이고 상속받고자 하는 기존의 클래스 이름이 Parent 일 때>
class Parent { }
class Child extends Parent {
//Child는 자손클래스, Parent는 조상클래스
}
'조상클래스'
, 상속 받는 클래스를 '자손클래스'
라고 함class Parent {
int age;
}
class Child extends Parent{ }
class Paretn {
int age;
}
class Child extends Parent {
void play() {
System.out.println("놀자~");
}
}
Child클래스에 새로운 코드가 추가되어도 조상인 Parent클래스는 아무런 영향 없음
자손 클래스는 조상 클래스의 모든 멤버를 상속 받으므로 항상 조상 클래스보다 같거나 많은 멤버를 가짐. 즉, 상속에 상속을 거듭할수록 상속받는 클래스의 멤버 개수는 점점 늘어나게 됨
상속을 받는다는 것은 조상 클래스의 확장(extend)한다는 의미로 해석할 수도 있으며, 상속의 키워드가 extend인 이유
- 자손 클래스는 조상클래스의 모든 멤버를 상속 받음
(단, 생성자와 초기화 블럭은 상속되지 않음)- 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많음
▶ Tv클래스로부타 상속받고 기능을 추가하여 smartTv클래스를 작성
▶ 멤버변수 caption은 캡션기능의 상태(on/off)를 저장하기 위한 boolean형 변수
▶ displayCaption(String text)은 매개변수로 넘겨받은 문자열(text)을 캡션이 켜져 있는 경우(caption의 값이 true인 경우)에만 화면에 출력
▶ 자손 클래스의 인스턴스를 생성하면 조상 클래스의 멤버도 함께 생성되기 때문에 따로 조상 클래스의 인스턴스를 생성하지 않고도 조상 클래스의 멤버들을 사용 가능
포함(composite)
: 클래스 간의 포함관계를 맺어주는 것이며, 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것원(Circle)을 표현하기 위한 Circle클래스와 좌표상의 한 점을 다루기 위한 Point클래스를 아래와 같이 작성함
class Circle {
int x; //원점의 x좌표
int y; //원점의 y좌표
int r; //반지름(radius)
}
class Point {
int x; //x좌표
int y; //y좌표
}
Point클래스를 재사용해서 Circle클래스를 작성한다면 다음과 같이 할 수 있을 것
class Circle {
int x; //원점의 x좌표
int y; //원점의 y좌표
int r; //반지름(radius)
}
▼▼▼▼▼▼▼포함관계▼▼▼▼▼▼▼
class Circle {
Point c = new Point(); //원점
int r;
}
▼▼▼▼▼▼▼상속관계▼▼▼▼▼▼▼
class Circle extends Point {
int r;
}
class Car {
Engine e = new Engine(); //엔진
Door[] d = new Door[4]; //문, 문의 개수를 넷으로 가정하고 배열로 처리
원(Circle)은 점(Point)이다. - Circle is a Point.
원(Circle)은 점(Point)을 가지고 있다. - Circle has a Point.
→원은 원점(Point)과 반지름으로 구성되므로 두 문장을 비교해 보면 포함관계가 더 옳음SportsCar는 Car이다
→상속관계
📌 상속
: ~은 ~이다(is-a).
📌 포함
: ~은 ~을 가지고 있다(has-a).