我可以从超级的超级中调用重写的方法吗?
假设我有这三个类:
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
类型的对象。
Assume that I have these three classes:
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();
}
}
Is it possible to call a Foo
's fn()
? I know that my solution in gn()
doesn't work because this
is pointing to an object of type Bar
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这在 Java 中是不可能的。您可以使用 super,但它始终使用类型层次结构中直接超类中的方法。
另请注意:这
是
多态性的定义,虚拟调用如何工作:即使f
的类型为Foo
,但在运行时f.fn()
被分派到Bar.fn()
。编译时类型并不重要。It's not possible in Java. You can use
super
but it always uses the method in immediate superclass in type hierarchy.Also note that this:
is the very definition of
polymoprhismhow virtual call works: even thoughf
is of typeFoo
, but at runtimef.fn()
is dispatched toBar.fn()
. Compile-time type doesn't matter.