3

Java では、「this」は現在のオブジェクトを指します。「this」は現在のオブジェクトと同じ型であると想定しましたが、次の例を考えてみましょう。

class A {
    static void f() {
        System.out.println("A.f");
    }
    void g() {
        this.f();
    }
}
class B extends A {
    static void f() {
        System.out.println("B.f");
    }
}
public class C {
    public static void main(String[] args) {
        B test = new B();
        h(test);
    }
    static void h(B x) {
        x.g();
    }
}

結果は次のとおりです。

A.f.

xg() が呼び出されたとき、x は B 型であるため、わかりません。xg() 呼び出しでは、g が B で検索され、次に A で検索されます (B が A をサブクラス化するため)。次に、g は、A と B の両方のインスタンス メソッドである f を呼び出します。つまり、呼び出される f のバージョンは、暗黙の THIS パラメーターの型に依存します。X は B 型なので Bf() が呼び出されると思いますが、そうではありません。

THIS は正確にはどのような型をとりますか?

4

1 に答える 1