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

  • 다형성을 이루는 중요한 요인중 위에서 공부한 다형적 참조와 이번에 배울 메서드 오버라이딩이 핵심이론이다.
  • 기억해야할점은 오버라이딩 된 메서드가 항상 우선권을 가진다.

→ 자식 타입 변수 가 자식 객체를 참조 할때에 🔽

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("valud = " + poly.value); // 변수는 오버라이딩 x
poly.method(); // 메서드는 오버라이딩 O

// -----------------------------------------------------------------
// 실행 결과 
Parent -> Child
valud = parent // 부모 변수 그대로 
Child.method // 오버라이딩 된 자식 메서드 사용 

→ 중요한 부분이다 우리가 배운 다형적 참조 지식 이라면 변수는 부모 타입의 변수의 값과 기능을 호출할때에는 자식 객체 내의 부모 영역에서 찾는다고 알고 있었다.

→ 하지만 !! 자식 객체 내에 오버라이딩 된 메서드는 항상 우선권을 갖게 된다.

→ 따라서 Parent.method 가 아닌 오버라이딩 된 child.method 가 실행 된것 이다.

→ 만일 손자타입 객체 사용 시 손자 에서 메서드가 오버라이딩 된 것을 호출한다면 손자의 것을 호출하게 된다.


+ Recent posts