假设我有以下类(class)
class A{
public method(A a) {
System.out.println(3);
}
}
class B extends A{
public void method (A a) {
System.out.println(2);
}
public void method (B b) {
System.out.println(1);
}
}
A obj = new B();
obj.method( (B) obj);
((B) obj).method( (B) obj);
第一个方法调用打印出 2,而第二个方法调用打印出 1。为什么两个方法调用都不打印出 1?
最佳答案
B 的
void method (B b)
对于其父 A 是完全未知的。
这是合乎逻辑的,因为在obj.method((B) obj);
中,obj
的类型是A,在多态规则中它可以调用 void method(A a)
类 B 的版本。
class B extends A {
// This is an overridden method visible to A
public void method(A a) {
System.out.println(2);
}
// This is an overloaded method unknown from A
public void method(B b) {
System.out.println(1);
}
}
You can read this SO answer which explained Override vs. Overload.
关于带有方法调用的 Java 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15062841/