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
。