본문 바로가기
Language/Java

[Java] 오버라이딩 조건 5가지

by 클레어몬트 2024. 8. 9.

1. 선언부가 완전히 같아야 한다 (이름, 매개변수, 리턴타입)

※ 반환 타입이 하위 클래스 타입일 수는 있다


2. 자식 클래스의 접근 제어자를 더 좁은 범위로 변경할 수 없다 

오버라이딩 메서드의 접근 제어자는 상위 클래스의 메서드보다 더 제한적이어서는 안된다. 예를 들어, 상위 클래스의 메서드가 protected로 선언되어 있으면 하위 클래스에서 이를 public 또는 protected로 오버라이드할 수 있지만, private 또는 default로 오버라이드 할 수 없다.


3. 조상클래스의 메서드보다 더 많은 예외를 선언할 수 없다 

오버라이딩 메서드는 상위 클래스의 메서드보다 더 많은 체크 예외를 throws로 선언할 수 없다. 하지만 더 적거나 같은 수의 예외, 또는 하위 타입의 예외는 선언할 수 있다


4. static, final, private 키워드는 절대 오버라이딩 될 수 없다

- static은 클래스 레벨에서 작동하므로 인스턴스 레벨에서 사용하는 오버라이딩이 의미가 없다. 쉽게 이야기해서 그냥 클래스 이름을 통해 필요한 곳에 직접 접근하면 된다
- final 메서드는 재정의를 금지한다
- private 메서드는 해당 클래스에서만 접근 가능하기 때문에 하위 클래스에서 보이지 않는다, 따라서 오버라이딩 될 수 없다

 

5. 생성자 오버라이딩: 생성자는 오버라이딩 할 수 없다.

 

 

 

이 5가지를 전부 다 외울 필요는 없다! 1번은 당연히 알아야 하지만, 2번과 3번 같은 경우는 실전에서 부딪히며 자연스럽게 알게 된다. 또한 4번과 5번은 원리적으로 당연한 것들이다.

 

 

 

 

 

 

 

참고 및 출처: 자바의 정석(남궁석)