假设我有这三个类:
class Foo {
void fn() {
System.out.println("fn in Foo");
}
}
class Mid extends Foo {
void fn() {
System.out.println("fn in Mid");
}
}
class Bar extends Mid {
void fn() {
System.out.println("fn in Bar");
}
void gn() {
Foo f = (Foo) this;
f.fn();
}
}
public class Trial {
public static void main(String[] args) throws Exception {
Bar b = new Bar();
b.gn();
}
}
是否可以拨打Foo
fn()
?我知道gn()
中的解决方案不起作用,因为this
指向Bar
类型的对象。
答案 0 :(得分:5)
在Java中是不可能的。您可以使用super
,但它始终使用类型层次结构中的立即超类中的方法。
另请注意:
Foo f = (Foo) this;
f.fn();
是 polymoprhism 的定义虚拟调用的工作方式:即使f
的类型为Foo
,但在运行时f.fn()
也会调度到{{} 1}}。编译时类型并不重要。