假设我有这三个类:
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
的对象。
这在Java中是不可能的。你可以使用super
,但它总是在类型层次结构的直接超类中使用方法。
还要注意:
Foo f = (Foo) this;
f.fn();
是多态的定义虚调用是如何工作的:即使f
是Foo
类型,但在运行时f.fn()
被分派给Bar.fn()
。编译时类型不重要