以下是关于我的疑问的代码snipplet。用Java调度的动态方法
class A {
void someMethod(A param) {
System.out.println("A");
}
}
class C extends A {
void someMethod(C param) {
System.out.println("C");
}
}
class DMD {
public static void main(String[] args) {
A ac = new C();
C c = new C();
ac.someMethod(c);
}
}
输出:
A
但我除外的输出作为
C
因为我为C
分配的内存,和A
被参照的C
存储器位置,因此,如果我将A
引用指向C
的方法,并将参数作为传递类型,那么我期望someMethod(C)
方法应该执行。
任何人都可以请给我这种行为的正当理由吗?
在此先感谢。
你有什么不能编译,因为C不扩展A. – 2010-09-20 14:35:35
这与正则表达式无关btw – sepp2k 2010-09-20 14:40:15
http://stackoverflow.com/questions/321864重复(如果你调整编码错误)/java的动态绑定 - 方法-首要/ 322234#322234 – Robin 2010-09-20 14:58:27