til/Java

메소드 오버라이딩(method overriding)

값진 2022. 4. 23. 22:13

메소드 오버라이딩(method overriding)

  - 상속받은 부모 클래스의 메소드를 자식 클래스에서 같은 시그니쳐를 갖는 메소드로 재정의하는 것

 * 헷갈릴 수 있으나 전혀 다른 개념

   메소드 오버로딩은 서로 다른 시그니처를 갖는 여러 메소드를 하나의 이름으로 정의하는 것

 

조건  

  - 메소드의 동작만을 재정의하기 때문에 메소드의 선언부는 같다.

  - 부모 클래스의 메소드보다 더 좁은 범위의 접근 제어자로 변경은 불가능

  - 부모 클래스의 메소드보다 더 큰 범위의 예외는 선언할 수 없음

 

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

class Child extends Parent {
    void display() {
    System.out.println("자식 클래스의 display() 메소드");
    }
}

public class Inheritance05 {
    public static void main(String[] args) {
        Parent pa = new Parent();
        pa.display();
        
        Child ch = new Child();
        ch.display();
        
        Parent pc = new Child();
        pc.display(); // Child cp = new Parent();

    }
}

결과

부모 클래스의 display() 메소드

자식 클래스의 display() 메소드

자식 클래스의 display() 메소드

 

  - 메소드 오버라이딩을 통해 상속받은 부모 클래스의 메소드를 자식 클래스에서 직접 재정의할 수 있다.

  - 부모 클래스인 Parent 클래스의 display() 메소드를 자식 클래스인 Child 클래스에서 오버라이딩하고 있다.

 


오버로딩과 오버라이딩

  • 오버로딩(overloading) : 새로운 메소드를 정의하는 것
  • 오버라이딩(overriding) : 상속받은 기존의 메소드를 재정의하는 것

  부모 클래스인 Parent 클래스의 display() 메소드를 자식 클래스인 Child 클래스에서 오버라이딩과 오버로딩하고 있다.

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 Inheritance {
    public static void main(String[] args) {
        Child ch = new Child();
        ch.display();
        ch.display("오버로딩된 display() 메소드");
    }
}

결과

자식 클래스의 display() 메소드

오버로딩된 display() 메소드