상속(inheritance)
상속(inheritance)
상속의 정의와 장점
상속이란? 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다.
이런한 특징은 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다.
키워드 “extends”를 사용한다.
서로 상속관계에 있는 두 클래스를 조상 클래스, 자손 클래스와 같은 용어로 표현할 수 있다.
상속 계층도(class hierarchy): 상속 관계를 그림으로 표현한 것
자손 클래스에 새로운 코드가 추가되어도 조상 클래스는 아무런 영향을 받지 않는다.
생성자와 초기화 블록은 상속되지 않는다. 멤버만 상속된다.
자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.
접근 제어자(access modifier)로 private 또는 default가 사용된 멤버들은 상속되지 않는다라고 보기보다는 상속은 받지만 자손 클래스로부터의 접근이 제한되는 것으로 보는 것이 옳다.
자손 클래스에 공통적으로 추가되어야하는 멤버(멤버 변수, 메서드)가 있다면 조상 클래스에 추가하는 것이 좋다.
직접 조상: 조상 클래스로부터 직접 상속받은 자손 클래스
간접 조상: 자손 클래스를 상속받은 또 다른 자손 클래스
클래스간의 관계 – 포함관계
상속이외에도 클래스를 재사용하는 또 다른 방법이 있는데, 그 것은 클래스간에 포함(Composite)관계를 맺어 주는 것이다.
클래스간의 관계 결정하기
상속 관계: ~은 ~이다(is ~a)
포함 관계: ~은 ~을 가지고 있다(has ~a)
단일상속(single inheritance)
자바에서는 단일 상속만을 허용하기 때문에 하나 이상의 클래스로부터 상속을 받을 수 없다.
다중 상속과 같은 효과를 얻기 위해서는 “포함(Composite)”관계를 활용하면 된다.
Object클래스 – 모든 클래스의 조상
다른 클래스로부터 상속 받지 않는 모든 클래스들은 자동적으로 Object클래스로부터 상속받게 함으로써 이것을 가능하게 한다.
이미 어떤 클래스로부터 상속받도록 작성된 클래스에 대해서는 컴파일러가 “extends Object”를 추가하지 않는다.