회원가입

다형성 - 메서드 오버라이딩

Beany 2024-10-10

ChatGPT 요약

메서드 오버라이딩은 다형성의 중요한 개념으로, 오버라이딩된 메서드가 우선권을 가지며 새로운 기능을 정의한다. 부모와 자식 클래스 간의 맴버 변수는 오버라이딩 되지 않고, 메서드는 오버라이딩된다. 오버라이딩을 이해하기 위해 부모와 자식 클래스의 코드를 통해 다형성과 메서드 오버라이딩을 살펴보고, 오버라이딩 된 메서드가 우선권을 가진다는 점을 설명한다.

다형성과 메서드 오버라이딩


다형성을 이루는 또 하나의 중요한 핵심 이론은 바로 메서드 오버라이딩이다.
메서드 오버라이딩에서 꼭! 기억해야 할 점은 오버라이딩 된 메서드가 항상 우선권을 가진다는 점이다.
그래서 이름도 기존 기능을 덮어 새로운 기능을 재정의 한다는 뜻의 오버라딩이다.

앞서 메서드 오버라이딩을 학습했지만 지금까지 학습한 메서드 오버라이딩은 반쪽짜리다. 메서드 오버라이딩의 진짜 힘은 다형성과 함께 사용할 때 나타난다. 다음 코드를 통해 다형성과 메서드 오버라이딩을 알아보자.

Parent, Child 모두 value 라는 같은 맴버 변수를 가지고 있다.
- 맴버 변수는 오버라이딩 되지 않는다.

Parent, Child 모두 method() 라는 같은 메서드를 가지고 있다. Child 에서 메서드를 오버라이딩 했다.
- 메서드는 오버라이딩 된다.

package poly.overriding;

public class Parent {
    public String value = "부모";

    public void method() {
        System.out.println("Parent method");
    }
}
package poly.overriding;

public class Child extends Parent {
    public String value = "자식";

    @Override
    public void method() {
        System.out.println("Child method");
    }
}
package poly.overriding;

public class OverridingMain {
    public static void main(String[] args) {
        // 자식 변수가 자식 인스턴스 참조
        Child child = new Child();
        System.out.println("Child -> Child");
        System.out.println("value = " + child.value);
        child.method();

        // 부모 변수가 부모 인스턴스 참조
        Parent parent = new Parent();
        System.out.println("Parent -> Parent");
        System.out.println("value = " + parent.value);
        parent.method();

        // 부모 변수가 자식 인스턴스 참조 (다형적 참조)
        Parent poly = new Child();
        System.out.println("Parent -> Child");
        System.out.println("value = " + poly.value);
        poly.method();  // 메서드 오버라이딩
    }
}
Child -> Child
value = 자식
Child method
Parent -> Parent
value = 부모
Parent method
Parent -> Child
value = 부모
Child method

오버라이딩 된 메서드는 항상 우선권을 가진다. 오버라이딩은 부모 타입에서 정의한 기능을 자식 타입에서 재정의하는 것이다. 만약 자식에서도 오버라이딩 하고 손자에서도 같은 메서드를 오버라이딩을 하면 손자의 오버라이딩 메서드가 우선권을 가진다. 더 하위 자식의 오버라이딩 된 메서드가 우선권을 가지는 것이다.

0 0
JAVA
이 공간은 개인 공부를 통해 얻은 정보를 체계적으로 정리하고 공유하는 곳입니다. 학습한 내용, 발견한 지식, 그리고 문제 해결 방법 등을 기록하여 나만의 학습 자료를 구축하고, 필요할 때 쉽게 참고할 수 있는 유용한 자원으로 활용할 수 있도록 합니다.
Yesterday: 456
Today: 185