상속의 정의와 장점
상속이란, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다.
코드를 공통적으로 사용하는 클래스를 상속받게 되면 적은 양의 코드로 클래스를 작성할 수 있고 , 코드를 공통적으로 관리할 수 있어 코드의 재사용성과 중복을 제거 할 수 있다.
새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 extends 와 함께 써주기만 하면 된다.
상속해주는 클래스를 조상 클래스(부모 클래스, 상위 클래스, 기반 클래스)라고 하며,
상속받는 클래스는 자손 클래스(자식 클래스, 하위 클래스, 파생된 클래스)라고 한다.
class Child extends Parent {
...
}
조상 클래스와 자손 클래스의 관계
상속받은 자손 클래스는 상속해준 조상 클래스를 포함하고 있다고 생각하면 되므로, 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.
조상 클래스의 멤버변수가 생성될 때 자손 클래스에도 같은 멤버변수가 생성된다. 반대로 자손 클래스에서 무엇을 생성하더라도 조상 클래스에는 영향을 주지 않는다.
생성자와 초기화 블럭은 상속되지 않고, 멤버만 상속된다.
조상 클래스만 변경해도 모든 자손 클래스에 영향을 미치기 때문에, 공통적인 부분은 조상 클래스에서 관리하고 자손 클래스는 자신에 정의된 멤버만 관리하면 되므로 각 클래스의 코드가 적어져서 관리가 쉬워진다.
class Parent {
int age;
}
class Child extends Parent {
// int age // Parent의 멤버를 상속받아 age변수를 이용할 수 있다.
}
포함관계(composite relation)
한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것
코드를 작게 나누어 작석하기 때문에 관리에 쉬워지고, 재사용이 가능하다.
class Point {
int x;
int y;
}
class Circle {
// int x;
// int y;
Point p = new Point();
int r;
}
클래스간의 관계 결정하기
클래스를 작성하는데 있어서 상속관계를 맺어 줄 것인지 포함관계를 맺어 줄 것인지 혼란스러울 수 있다.
그럴땐 아래 문장으로 참조하면 판단하기 쉬워질것이다.
- 상속관계 - A는 B이다.(is-a)
- 포함관계 - A는 B를 가지고 있다.(has-a)
class Human { // 사람
int age; // 나이
String gender; // 성별
}
class Teacher extends Human { // 상속관계 -> 선생님은 사람이다.
School school = new School(); // 포함관계 -> 선생님은 출근하는 학교가 있다.
}
단일 상속(single inheritance)
C++에서는 여러 조상 클래스로부터 상속받는 것이 가능한 '다중 상속(multiple inheritance)'을 허용하지만 자바에서는 단일 상속만을 허용한다.
다중 상속은 복합적인 기능을 가진 클래스를 쉽게 작성할 수 있지만, 클래스 간의 관계까 매우 복잡해진다.
단일 상속만을 허용할 경우 클래스간의 관계가 보다 명확해지고 코드를 더욱 신뢰할 수 있게 만들어 준다.
Object 클래스 - 모든 클래스의 조상
Object 클래스는 모든 클래스 상속 계층도의 최상위에 있는 조상 클래스이다.
다른 클래스로부터 상속받지 않는 모든 클래스들은 자동적으로 Object 클래스를 상속받는다.
'Java' 카테고리의 다른 글
접근 제어자(access modifier) (0) | 2021.09.16 |
---|---|
오버라이딩(overriding) (0) | 2021.09.14 |
변수의 초기화 (0) | 2021.09.14 |
재귀호출(recursive call) (0) | 2021.09.14 |
오버로딩(overloading) (0) | 2021.09.14 |