Back-End/Java

[자바 / Java] 메서드 오버라이딩(Method Overriding)

Kangharyeom 2022. 9. 6. 15:40
728x90

메서드 오버라이딩은 상위 클래스로부터 상속받은 메서드와 동일한 이름의 메서드를 재정의 하는 것이다. 

즉, 부모클래스의 메서드(same)와 자식클래스의 메서드(same)의 이름이 같을 때, 자식클래스의 메서드로 덮어씌워지는 것을 뜻한다.

 

코드를 통해 알아보자

class Parents {
    void same() {
        System.out.println("I'm your father");
    }
}

public class Son extends Parents { // Parents 클래스 상속
    void same() {
        System.out.println("Yes, I'm your son"); // 메서드 오버라이딩
    }

    public static void main(String[] args) {
        Son son = new Son();
        son.same();
    }
}

// 출력값
"Yes, I'm your son"

다음과 같이 최종적인 출력값은 Son클래스에 있는 same()메서드가 출력된다. 

 

오버라이딩의 조건

 

오버라이딩의 조건은 다음과 같다.

  • 메서드의 선언부(메서드 이름, 매개변수, 변환타입)이 상위 클래스와 완전히 일치해야 한다.
  • 접근 제어자의 범위가 상위 클래스의 메서드보다 같거나 넓어야 한다.
  • 예외는 상위 클래스의 메서드보다 많이 선언할 수 없다. 

 

느낀점 

 

메서드 오버라이딩은 파일 복사 붙여넣기와 비슷한 개념이라고 생각되었다.

오버로딩과 헷갈리지 말아야 할 점은 오버로딩은 과적한다는 개념으로 같은 메서드 이름에 다른 변환타입이나 개수를 적용해야하는데 반해 오버로딩은 완전히 일치해야 한다는 것이다. 따라서, 의미를 헷갈리지 않게 기억해야겠다.