7. 상속
7.1 상속 개념
상속(Inheritance)는 부모가 자식에게 물려주는 행위
7.2 클래스 상속
자식 클래스가 어떤 부모 클래스를 상속 받을 것인지 결정하고 선택, extends를 이용
class 자식클래스 extends 부모클래스 { }
- 여러 개의 부모 클래스를 상속할 수 없다. 단 하나!
7.3 부모 생성자 호출
- 자식 객체를 생성하면, 부모 객체가 먼저 생성되고 자식 객체가 그 다음에 생성
- super()는 부모의 기본 생성자를 호출
- super(매개값)는 매개값의 타입과 일치하는 부모 생성자를 호출
7.4 메소드 재정의
- 상속된 일부 메소드를 자식 클래스에서 수정해서 사용하기 위해 오버라이딩(Overriding) 기능 제공
- 오버라이딩 되었다면 부모 객체의 메소드는 숨겨지기 때문에, 자식 객체에서 메소드 호출하면 자식 메소드 호출
- 접근 제한을 더 강하게 오버라이딩할 수 없다.
- 오버라이딩 메소드지만, super를 이용해 부모의 메소드 호출이 가능
7.5 final 클래스, final 메소드
- 클래스에 final을 사용하면 상속할 수 없는 클래스. 부모 클래스가 될 수 없다는 뜻
- 메소드를 선언에 final을 붙이면, 오버라이딩할 수 없는 메소드. 즉, 자식 클래스에서 재정의가 불가능
7.6 protected 접근 제한자
protected는 같은 패키지에서는 접근 제한이 없지만 다른 패키지에서는 자식 클래스만 접근 허용
7.7 타입 변환과 다형성
다형성은 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질
- 자식 타입은 부모 타입으로 자동 타입 변환이 가능
- 바로 위 부모가 아니여도, 상속 계층에서 상위 타입이라면 자동 타입 변환이 가능
- 타입 변환 시 부모 클래스에 선언된 필드와 메소드만 접근 가능
(단, 오버라이딩된 메소드는 자식 클래스의 메소드가 호출)
- 강제 타입 변환은 부모 타입을 자식 타입으로 변환하는 것
(자식 타입 -> 부모 타입 -> 자식 타입일 경우만 강제 타입 변환 가능)
- instanceof를 사용해서 인스턴스 확인
7.8 추상 클래스
추상(abstract)는 실체 간 공통되는 특성을 추출한 것
public abstract class 클래스 { }
- 추상 클래스는 객체를 직접 생성해서 사용 불가, 부모 클래스로만 사용
- 추상 클래스도 생성자가 반드시 있어야 한다.
7.8.4 추상 메소드와 오버라이딩
공통되는 부분이지만 하위 클래스가 채워야하는 메소드인 경우, 추상 메소드를 활용