✅ 상속 ✅ 포함 ✅ 단일 상속 ✅ 다중 상속 ✅ Object 클래스
기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것
class Child extends Parent{
// ...
}
- 자손 클래스는 조상 클래스의 모든 멤버를 상속받기 때문에, child 클래스는 parent 클래스의 멤버들을 포함한다고 할 수 있다.
- 만약 parent 클래스에 멤버변수를 추가하면, child 클래스는 자동적으로 멤버변수가 추가된다.
- 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다.
- 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거다 많다.
- 자손 클래스의 인스턴스를 생성하면 조상 클래스의 멤버도 함께 생성되기 때문에 따로 조상 클래스의 인스턴스를 생성하지 않고도 조상 클래스의 멤버들을 사용할 수 있다.
한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것
class Point{
int x; // 원점의 x좌표
int y; // 원점의 y좌표
}
class Circle{
int x; // 원점의 x좌표
int y; // 원점의 y좌표
int r; // 반지름
}
class Point{
int x; // 원점의 x좌표
int y; // 원점의 y좌표
}
class Circle extends Point{
int r; // 반지름
}
class Point{
int x; // 원점의 x좌표
int y; // 원점의 y좌표
}
class Circle{
Point c = new point(); // 원점
int r; // 반지름
}
상속관계 : ~은 ~이다. (is)
포함관계 : ~은 ~을 가지고 있다. (has)
위 예시에 적용시켜보면
1. 원(Circle)은 점(Point)이다.
2. 원(Circle)은 점(Point)을 가지고 있다.
원(Circle)은 원점(Point)과 반지름으로 구성되어 있으므로 2가 더 옳다.
따라서 원과 점은 상속관계 보다 포함관계를 맺어 주는 것이 더 옳다.
만약 도형(Shape)이라는 클래스가 있다면 원은 클래스이므로 상속관계가 더 적절할 것이다.
(single inheritance)
다른 객체지향언어인 C++ 에서는 다중 상속(multiple inheritance)을 허용하지만 자바에서는 단일 상속만을 허용한다.
(multiple inheritance)
따라서 toString(), equals() 같은 기본적인 11개의 메서드를 따로 정의하지 않고 사용할 수 있는 것이다.