07 상속
07-1 상속
시작하기 전에
- 상속은 이미 개발된 클래스를 재사용하여 새로운 클래스를 만들기 때문에 중복되는 코드를 줄여준다.
- 부모 클래스 한 번의 수정으로 모든 자식 클래스까지 수정되는 효과가 있어 유지보수 시간이 줄어든다.
클래스 상속
- 자식 클래스 선언 시 부모 클래스를 선택한다.
- extends 뒤에 부모 클래스 기술한다.
class 자식 클래스 extends 부모 클래스 {
// 필드
// 생성자
// 메소드
}
- 여러 개의 부모를 상속할 수 없다.
- 부모 클래스에서 private 접근 제한을 갖는 필드와 메소드는 상속 대상에서 제외된다.
- 부모와 자식 클래스가 다른 패키지에 존재할 경우 default 접근 제한된 필드와 메소드 역시 제외
부모 생성자 호출
- 자식 객체 생성할 때 부모 객체가 먼저 생성되고 이후 자식 객체가 생성된다.
- 자식 생성자의 맨 첫 줄에서 부모 생성자가 호출된다.
- 명시적으로 부모 생성자를 호출하려면 super(매개값, …) 메소드를 이용한다.
자식클래스(매개변수선언, ...) {
super(매개값, ...);
...
}
- super(매개값, …)가 생략되면 부모 클래스에 기본 생성자가 있어야 한다.
- super(매개값, …)는 반드시 생성자 첫 줄에 위치해야 한다.
메소드 재정의(Overriding)
- 부모 클래스의 메소드가 자식 클래스에서 사용하기 부적합할 경우 자식 클래스에서 수정하여 사용
- 메소드 재정의 방법
- 부모 메소드와 동일한 시그니처
- 접근 제한 더 강하게 재정의 불가능
- 새로운 예외(Exception)를 throws 할 수 없음
- 메소드가 재정의될 경우 부모 객체가 숨겨지며, 자식 객체에서 메소드를 호출하면 재정의된 자식 메소드가 호출된다.
부모 메소드 호출
- 자식 클래스 내부에서 재정의된 부모 클래스 메소드 호출해야 하는 경우, 명시적으로 super 키워드 붙여 부모 메소드 호출한다.
super.부모메소드();
final 키워드
- 해당 선언이 최종 상태이며 수정될 수 없다.
- 필드 선언 시 final 키워드를 사용하면 초기값 설정 후 더 이상 값을 변경할 수 없음을 의미한다.
- 클래스 및 메소드 선언 시 final 키워드를 사용하면 상속과 관련이 있다는 의미이다.
상속할 수 없는 final 클래스
- 부모 클래스가 될 수 없어 자식 클래스 만들 수 없음을 의미한다.
- final 클래스의 가장 대표적인 예는 String 클래스이다.
public final class String {...}
public class NewString extends String {...} // 상속 불가능!
재정의할 수 없는 final 메소드
- 부모 클래스에 선언된 final 메소드는 자식 클래스에서 재정의할 수 없다.
public final 리턴타입 메소드([매개변수, ...]) {...} // 메소드 재정의 불가능!
마무리 핵심 포인트
- 상속: 부모 클래스의 필드와 메소드를 자식 클래스에서 사용할 수 있도록 한다.
- 메소드 재정의(오버라이딩): 부모 메소드를 자식 클래스에서 다시 정의하는 것을 말한다.
- final 클래스: final 키워드로 선언된 클래스는 부모 클래스로 사용할 수 없는 final 클래스이다.
- final 메소드: final 키워드로 선언된 메소드는 자식 클래스에서 재정의할 수 없는 final 메소드이다.
※ 이 내용은 책 [혼자 공부하는 자바]를 보고 정리한 내용입니다.
'🌎 Web > Java' 카테고리의 다른 글
[Java] 추상 클래스 (0) | 2022.12.07 |
---|---|
[Java] 타입 변환과 다형성 (0) | 2022.12.07 |
[Java] 패키지와 접근 제한자 (0) | 2022.11.30 |
[Java] 인스턴스 멤버와 정적 멤버, 싱글톤, final (0) | 2022.11.29 |
[Java] 메소드(method) (2) | 2022.11.28 |