【发布时间】:2015-10-23 04:05:58
【问题描述】:
我想对动态多态性有一些清晰的了解。 当子类中的方法被覆盖和重载时,我无法弄清楚方法调用。
这是父类:
父类:
public class Parent {
void print(Parent parent){
System.out.println("I am parent classes only print method.");
}
}
儿童班:
public class Child extends Parent {
void print(Child child) {
System.out.println("I am child class' child print method.");
}
void print(Parent parent) {
System.out.println("I am Child class' parent print method ");
}
}
这是调用者类。
public class Caller {
public static void main(String[] args) {
Parent p = new Parent();
Child c = new Child();
Parent pc = new Child();
p.print(p);
p.print(c);
p.print(pc);
c.print(p);
c.print(c);
c.print(pc);
pc.print(p);
pc.print(c);
pc.print(pc);
}
}
我可以在控制台中看到输出,但无法理解方法调用背后的原因。
【问题讨论】:
-
在我看来,Visitor 很奇怪。
-
“当子类中的方法被覆盖和重载时,我无法弄清楚方法调用。” ...绝不应该是这种情况。 Java 中的重载解析发生在编译时,而不是运行时。如果编译器可以从您的代码中判断要调用哪个方法,那么您也可以。
标签: java polymorphism parametric-polymorphism