public class Parent {
public void parentMethod() {
System.out.pritnln("Parent.parentMethod");
}
}
public class Child extends Parent {
public void childMethod() {
System.out.println("Child.childMethod");
}
}
1-1-1. 부모 변수 → 부모 인스턴스 참조
Parent parent = new Parent();
parent.parentMethod();
public class Parent {
public String value = "parent";
public void method() {
System.out.println("Parent.method");
}
}
...
public class Child extends Parent {
public String value = "child";
@Override
public void method() {
System.out.println("Child.method");
}
}
1-4-1. 자식 변수가 자식 인스턴스 참조
Child child = new Child();
System.out.println("value = " + child.value);
child.method();
/* 실행결과
value = child
Child.method
*/
1-4-2. 부모 변수가 부모 인스턴스 참조
Parent parent = new Parent();
System.out.println("value = " + parent.value);
parent.method();
/* 실행결과
value = parent
Parent.method
*/
1-4-3. 부모 변수가 자식 인스턴스 참조 (다형적 참조) ⭐️
Parent poly = new Child();
System.out.println("value = " + poly.value);
poly.method();
/* 실행결과
value = parent
Child.method
*/
poly.value
자기 타입의 멤버 변수 접근 (만약 멤버 변수가 없다면 하위 타입에서 찾음)
멤버 변수(필드) 는 오버라이딩 불가!
poly.method()
자기 타입의 메서드 접근 ⇒ 하위 타입에서 오버라이딩 발견
오버라이딩 된 메서드는 항상 우선권을 가짐!!! ⇒ 따라서 child.method 실행된 것
1-5. 정리
⭐ 다형성 정리
1. 다형적 참조 : 하나의 변수 타입으로 하위(자식) 인스턴스 참조 가능 2. 메서드 오버라이딩 - 기존 메서드를 하위 타입에서 재정의 - 오버라이딩 된 메서드는 항상 우선권을 가짐!