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

<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(); //메서드 오버라이딩!
  }
}

Untitled

자식아래 손자가 있다면 항상 더 하위 자식이 우선권을 가짐!

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();

⇒ 컴파일 오류남.

중요 포인트는 부모는 자식을 품을 수 있다 ⇒상속 관계는 부모 방향으로 찾아 올라갈 수는 있지만 자식 방향으로 찾아 내려갈 수는 없다 오버라이딩 호출 자식우선, 손자 우선