상속(Inheritance)
- 기존의 클래스로 새로운 클래스를 작성하는 것.(코드의 재사용)
- 두 클래스를 부모와 자식으로 관계를 맺어주는 것.
class 자식클래스 extends 부모클래스 {
}
- 자손은 조상(부모의 부모까지도)의 선택의 여지없이 모든 멤버를 상속받는다.(생성자, 초기화블럭 제외)
- 마치 탈..모..처럼...안 받고 싶다고 안 받을 수 없음.
- 자손의 멤버 개수는 조상보다 적을 수 없다.(같거나 많다)
- 자손의 변경은 조상에 영향을 미치지 않는다.
- 그래서 Child 클래스는 멤버가 2개이다. 자신의 멤버(play()) 1개, 상속받은 멤버(age) 1개
포함(Composite)
- 클래스의 멤버로 참조변수를 선언하는 것.
- 오른쪽 Circle 클래스가 Point를 포함시키고 있는 것임.
따라서, Circle과 Point는 포함관계.
- 포함은 이처럼 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하고, 그 타입의 객체를 만드는 것(선언)을 말한다.
- 왼쪽 Circle은 Point와 아무 관계도 아님.
클래스 간의 관계 결정하기
말이 되는지 생각해 보면 된다.
- 상속관계 '~은 ~이다.(is-a)'
- 포함관계 '~은 ~을 가지고 있다.(has-a)'
예) 포함관계.
| Circle.java
class Circle {
Point c = new Point();
int r;
}
| Point.java
class Point {
int x;
int y;
}
→ 원(Circle)은 점(Point)이다. X 말이 안됨
→ 원(Circle)은 점(Point)을 가지고 있다. O 말이 됨.
예2) 상속관계
| Circle.java
class Circle extends Point {
int r;
}