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。