- 기존의 클래스로 새로운 클래스를 작성하는 것.(코드의 재사용)
- 두 클래스를 부모와 자식으로 관계를 맺어주는 것.
Ex) class Parent {} class Child extends Parent { // ..... }
- Parent 클래스와 Child 클래스는 상속관계!
- 자손은 조상의 모든 멤버를 상속받는다.(생성자, 초기화블럭 제외)
- 부모의 부모 클래스가 존재할 수 있다.- 자손의 멤버 개수는 조상보다 적을 수 없다.(같거나 많다.)
Ex) class Parent { int age; } class Child extends Parent {}
- child = 멤버 1개 (자신의 멤버는 없으나, 부모로부터 상속받으므로 1개!)
- parnet = 멤버 1개
Ex) class Parent {
int age;
}
class Child extends Parent {
void play() {
System.out.println("놀자~"); // 자식에 새로운 멤버 추가
}
}
Ex) class Point { // 2차원 좌표의 한 점 (x,y)
int x;
int y;
}
Ex) class Point 3D { // 3차원 좌표의 한 점 (x,y,z)
int x;
int y; --> class Point3D extends Point { int z;}
int z;
}
포함(composite)이란?
- 클래스의 멤버로 참조변수를 선언하는 것
- 왼쪽 : 멤버 3개로 표현 / Point와 관련 X
- 오른쪽 : 포함을 통해 표현(Circle이 Point를 포함) / Point와 관련 O
- 포함 = 다른 클래스 타입의 변수를 선언하고 그 타입의 객체를 만들어주는 것이다.
- 작은 단위의 클래스를 만들고, 이 들을 조합해서 클래스를 만든다.
- 상속관계 : '~은 ~이다.(is-a)'
- 포함관계 : '~은 ~을 가지고 있다.(has-a)'
- 1번 = 포함관계 / 2번 = 상속관계 ("가지고 있다." 표현이 더 말이 되므로 1번)
- 대부분 상속 보다 포함을 많이 사용한다.