자바 공부/[ 完 ] 자바 실전 - 기본편
10-4. 다형성 - 메서드 오버라이딩
잘데친갈비
2024. 3. 19. 16:56
다형성과 메서드 오버라이딩
- 다형성을 이루는 중요한 요인중 위에서 공부한 다형적 참조와 이번에 배울 메서드 오버라이딩이 핵심이론이다.
- 기억해야할점은 오버라이딩 된 메서드가 항상 우선권을 가진다.
→ 자식 타입 변수 가 자식 객체를 참조 할때에 🔽
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 가 실행 된것 이다.
→ 만일 손자타입 객체 사용 시 손자 에서 메서드가 오버라이딩 된 것을 호출한다면 손자의 것을 호출하게 된다.