【发布时间】:2013-03-19 14:38:45
【问题描述】:
我是 Java 世界的新手,我在弄清楚 Java 如何决定在存在多态性时调用哪个方法时遇到了一些问题。你能帮我弄清楚这个例子是如何工作的吗? 我尝试了代码并看到了结果。我更感兴趣的是它为什么会这样工作。
class A {
void redef(A a) { System.out.println("[A]"); }
}
class B extends A {
//@Override
void redef(B b) { System.out.println("[B]"); }
}
class C extends B {
}
public class Surcharge {
static void surcharge(A a) { System.out.println("[A]"); }
static void surcharge(B b) { System.out.println("[B]"); }
public static void main(String[] argv) {
A a = new A() ;
B b = new B() ;
A ab = new B();
C c = new C();
ab.redef(c); //?
surcharge(a); //?
surcharge(b); //?
surcharge(c); //?
surcharge(ab); //?
}
}
【问题讨论】:
-
你为什么不把你的问题缩小到对你没有意义的行为?就目前而言,这太像“来,为我做作业”。
-
此外,您可能希望阅读FAQ。您应该始终在问题中包含what you've tried 以及您所做的任何研究。
标签: java types casting polymorphism substitution