Java

[Java] 오버로딩 & 오버라이딩

junga 2022. 9. 10. 00:05

오버로딩과 오버라이딩 전에 메소드 시그니쳐 개념을 먼저 알아보자.



메소드 시그니쳐(Method signature)


  • 메소드의 선언부에 명시되는 매개변수의 리스트를 말한다.
  • 만약 두 메소드가 매개변수의 개수와 타입, 그 순서까지 모두 같다면, 두 메소드의 시그니처는 같다고 할 수 있다.


오버로딩(overloading)


  • 같은 이름의 메소드를 중복하여 정의하는 것을 의미한다.
  • 즉, 서로 다른 시그니처를 갖는 여러 메소드를 같은 이름으로 정의하는 것이다.
  • 오버로딩은 OOP특징인 다형성을 구현하는 방법 중 하나다.


오버라이딩(overriding)


  • 부모클래스의 메서드를 자식클래스에서 같은 시그니쳐를 갖는 메소드로 재정의하는 것이다.
  • 부모클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경할 수 없다.
  • 부모클래스의 메소드보다 더 큰 범위의 에외를 선언할 수 없다.


class Parent {
    void display() { System.out.println("부모 클래스의 display() 메소드입니다."); }
}


class Child extends Parent {
    // 오버라이딩
    void display() { System.out.println("자식 클래스의 display() 메소드입니다."); }

    // 오버로딩
    void display(String str) { System.out.println(str); }
}


public class Main {
    public static void main(String[] args) {
        Child ch = new Child();
        ch.display();
        ch.display("오버로딩된 display() 메소드입니다.");
    }
}

//  자식 클래스의 display() 메소드입니다.
//  오버로딩된 display() 메소드입니다.