본문 바로가기

JAVA

오버라이딩(Overriding)

1. 오버라이딩이란?

오버라이딩은 그 사전적 의미로 해석하는 것이 더 쉽다.

Overwrite ‘~위에 덮어쓰다’, 즉 내용을 덮어 쓴다는 의미이다.

이러한 의미로 보자면 오버라이딩은 부모 클래스로부터 상속받은 메서드를 자식 클래스가 덮어 쓴다는 의미가 쉽게 해석될 수 있다.

 

부모 클래스의 메서드는 그 기능 그대로 사용할 수도 있지만 자식 클래스의 특성에 맞게 변경을 할 수 있도록 하는 것이다.

 

 

2. 오버라이딩의 조건

 

오버라이딩은 내용만을 덮어 쓰기 때문에 기존의 메서드의 선언부가 일치해야 한다.

즉, 부모 클래스의 메서드와 반환 타입, 메서드 이름, 매개변수 이 세 가지 모두가 동일해야 한다.

자식 클래스에서 변경할 수 있는 부분은 내용 뿐이라는 것을 명심하자.

 

메서드의 선언부에는 이 이외에도 접근 제어자와 예외가 함께 선언되는 경우도 있는데 

이들은 그 제한 범위를 수정할 수 있다.

 

접근 제어자는 부모 클래스에서 지정한 영역보다 더 넓거나 같은 범위를 지정할 수 있다.

예를 들어 부모 클래스에서 protected 로 지정했을 경우, 자식 클래스에서 이를 오버라이딩 할 때는 같은 protected 또는 그보다 더 넓은 public 으로 지정할 수 있게 된다.

🖍 접근 제어자는 public, protected, default, private 순으로 접근 범위가 좁혀진다.

 

예외의 경우에는 기존 메서드보다 더 많은 수를 선언할 수 없다. 

이는 다시 말해 해당 예외의 부모인 Exception 또는 RuntimeException 으로 변경하는 것이 불가능 하다는 것이다. 

왜냐하면, 이 두 예외 클래스는 해당 클래스를 상속 받은 모든 예외를 처리할 수 있기 때문에 오히려 더 많은 예외 처리를 담당할 수 있게 되기 때문이다.

 

 

3. 오버로딩와 오버라이딩의 차이

 

오버로딩과 오버라이딩은 어휘의 유사성으로 인하여 자주 혼동되는 키워드이다.

 

먼저 오버라이딩은 앞서 정리한 것처럼 부모 클래스의 메서드를 자식 클래스의 특성에 맞게 수정하는 것을 의미하는 것이고,

 

오버로딩은 기존의 존재하는 메서드와의 동일한 기능을 구현하고자 할 때, 메서드 이름을 동일하게 하고 매개 변수를 달리하여 새로운 메서드를 만들어 내는 것을 의미한다.

 

'JAVA' 카테고리의 다른 글

다형성  (0) 2022.09.24
this 와 super  (0) 2022.09.21
클래스 간의 관계 - 상속, 포함  (0) 2022.09.18
오버로딩(Overloading)  (0) 2022.09.17
클래스 메서드와 인스턴스 메서드  (0) 2022.09.17