1. 선언부가 완전히 같아야 한다 (이름, 매개변수, 리턴타입)
※ 반환 타입이 하위 클래스 타입일 수는 있다
2. 자식 클래스의 접근 제어자를 더 좁은 범위로 변경할 수 없다
오버라이딩 메서드의 접근 제어자는 상위 클래스의 메서드보다 더 제한적이어서는 안된다. 예를 들어, 상위 클래스의 메서드가 protected로 선언되어 있으면 하위 클래스에서 이를 public 또는 protected로 오버라이드할 수 있지만, private 또는 default로 오버라이드 할 수 없다.
3. 조상클래스의 메서드보다 더 많은 예외를 선언할 수 없다
오버라이딩 메서드는 상위 클래스의 메서드보다 더 많은 체크 예외를 throws로 선언할 수 없다. 하지만 더 적거나 같은 수의 예외, 또는 하위 타입의 예외는 선언할 수 있다
4. static, final, private 키워드는 절대 오버라이딩 될 수 없다
- static은 클래스 레벨에서 작동하므로 인스턴스 레벨에서 사용하는 오버라이딩이 의미가 없다. 쉽게 이야기해서 그냥 클래스 이름을 통해 필요한 곳에 직접 접근하면 된다
- final 메서드는 재정의를 금지한다
- private 메서드는 해당 클래스에서만 접근 가능하기 때문에 하위 클래스에서 보이지 않는다, 따라서 오버라이딩 될 수 없다
5. 생성자 오버라이딩: 생성자는 오버라이딩 할 수 없다.
이 5가지를 전부 다 외울 필요는 없다! 1번은 당연히 알아야 하지만, 2번과 3번 같은 경우는 실전에서 부딪히며 자연스럽게 알게 된다. 또한 4번과 5번은 원리적으로 당연한 것들이다.
참고 및 출처: 자바의 정석(남궁석)
'Language > Java' 카테고리의 다른 글
[Java API] java.lang 패키지 주요 클래스와 인터페이스 정리 (0) | 2024.08.20 |
---|---|
JAVA 16 - instanceof 신기능(Pattern Matching for instanceof) (0) | 2024.08.11 |
[Java] 상속과 메모리 구조 (0) | 2024.08.09 |
[Java] 패키지 규칙 및 관례 (0) | 2024.08.06 |
Java 14 - 새로운 switch문(switch expression) (0) | 2024.07.28 |