package main;
class F {
void f() {
System.out.print("F.f() ");
this.g();
}
void g() {
System.out.print("F.g() ");
}
}
class Fbis extends F {
void f() {
System.out.print("Fbis.f() ");
this.g();
}
void g() {
System.out.print("Fbis.g() ");
super.f();
}
}
public class Main {
public static void main(String[] args) {
F f = new Fbis();
((F) f).f();
}
}
嗨,我想了解为什么永远不会调用 F 类中的 g() 函数。此代码编译并运行,但会导致显示如下的无限循环:
Fbis.f() Fbis.g() F.f() Fbis.g() F.f() Fbis.g() F.f() Fbis.g() F.f() Fbis.g() F.f() Fbis.g() F.f() Fbis.g() F.f() Fbis.g() F.f() ...
所以会发生什么,就是Fbis.f
调用,调用Fbis.g
,调用,F.f
而不是调用F.g
,F.f
调用Fbis.g
。