다형성과 메서드 오버라이딩
<aside> 💡 오버라이딩 된 메서드가 항상 우선권을 가진다 + 변수는 오버라이딩x
</aside>
<aside> 💡 변수는 클래스, 메서드는 참조(인스턴스)를 따라간다
</aside>
package poly.overriding;
public class Parent {
public String value = "parent";
public void method() {
System.out.println("Parent.method");
}
}
package poly.overriding;
public class Child extends Parent {
public String value = "child";
@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); //변수는 오버라이딩X
poly.method(); //메서드 오버라이딩!
}
}

자식아래 손자가 있다면 항상 더 하위 자식이 우선권을 가짐!
Parent parent = new Parent() Child child = new child() Parent poly = new child() Child c = new Parent(); X poly가 자식메서드를 childMethod() 를 호출하면 어떻게 될까?
poly.childMethod();
⇒ 컴파일 오류남.
중요 포인트는 부모는 자식을 품을 수 있다 ⇒상속 관계는 부모 방향으로 찾아 올라갈 수는 있지만 자식 방향으로 찾아 내려갈 수는 없다 오버라이딩 호출 자식우선, 손자 우선
Parent parent = new Parent() Child child = new child() Parent poly = new child() 가능은 하지만 자식메서드를 호출하면? 오버로이드 안된? Child c = new Parent(); X poly가 자식메서드를 childMethod() 를 호출하면 어떻게 될까?
poly.childMethod();
⇒ 컴파일 오류남.
중요 포인트는 부모는 자식을 품을 수 있다 ⇒상속 관계는 부모 방향으로 찾아 올라갈 수는 있지만 자식 방향으로 찾아 내려갈 수는 없다 오버라이딩 호출 자식우선, 손자 우선