Java 我可以从super的super调用重写的方法吗?
假设我有以下三个类:Java 我可以从super的super调用重写的方法吗?,java,inheritance,polymorphism,dynamic-binding,Java,Inheritance,Polymorphism,Dynamic Binding,假设我有以下三个类: 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
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()
中的解决方案不起作用,因为此
指向的是Bar
类型的对象,在Java中是不可能的。您可以使用super
,但它总是在类型层次结构的立即超类中使用方法
还请注意:
Foo f = (Foo) this;
f.fn();
虚拟调用是如何工作的:尽管
f
属于Foo
类型,但在运行时f.fn()
被分派到Bar.fn()
。编译时类型不重要。这是否可以编译?当然!!问题是什么?我忽略了方法是私有的