3
누군가이 결정을 어떻게 내렸는 지 설명해 주셨으면합니다. 나는 오버로드 된 버전이 선언 된 유형에 따라 선택되지만 두 번째 호출에서 런타임 유형에 따라 결정이 내려진 이유는 알고 있습니다. 사전에
오버로드 및 다형성
public class Test {
public static void main(String[] args) {
Parent polymorphicInstance = new Child();
TestPolymorphicCall tp = new TestPolymorphicCall();
tp.doSomething(polymorphicInstance);
// outputs: Parent: doing something...
call(polymorphicInstance);
// outputs: Child: I'm doing something too
}
public static void call(Parent parent){
parent.doSomething();
}
public static void call(Child child){
child.doSomething();
}
}
public class Parent {
public void doSomething() {
System.out.println("Parent: doing something...");
}
}
public class Child extends Parent{
@Override
public void doSomething() {
System.out.println("Child: I'm doing something too");
}
}
public class TestPolymorphicCall {
public void doSomething(Parent p) {
System.out.println("Parent: doing something...");
}
public void doSomething(Child c) {
System.out.println("Child: doing something...");
}
}
감사합니다!
TestPolymorphicCall 클래스 메서드가 인수 참조를 전혀 호출하지 않기 때문에이 까다로운 예제와 혼동스럽게 생각합니다. 하지만 선언 된 타입 **에 기반하여 선택된 ** 메소드의 오버로드 된 버전에 관계없이 당신은 맞습니다. ** 다형 타입을 다룰 때, 호출되는 동작은 서브 타입입니다. –