Javaのthisで指定されたメンバ変数が自クラスにない場合の対処法

java

実務を行う中で気になることがあったので、調査しました。
javaでは「thisで指定されたメンバ変数が自クラスにない場合、スーパークラスを参照しにいく」という挙動になると聞いたので試してみたのですが、確かにそうなりました。
試した結果は以下です。

【テストコード】

・Main.java

package jp.co.thistest;
public class Main {
    public static void main(String[] args) {
        ThisClass obj = new ThisClass();
        SpecializeClass obj2 = new SpecializeClass();
        obj.method(10);
        obj2.method(10);
    }
}

・ThisClass.java

package jp.co.thistest;
public class ThisClass {
    int a = 20;
    int b = 30;
    public void method(int a) {
        System.out.println
        ("■引数から与えられた値を参照(期待値10)");
        System.out.println(a);
        System.out.println
        ("■自クラスのメンバ変数をthis参照(期待値20)");
        System.out.println(this.a);
        System.out.println
        ("■自クラスのメンバ変数をthis参照(期待値30)");
        System.out.println(this.b);
    }
}

・SpecializeClass.java

package jp.co.thistest;
public class SpecializeClass extends ThisClass {
    int b = 40;
    public void method(int a) {
        System.out.println
        ("■引数から与えられた値を参照(期待値10)");
        System.out.println(a);
        System.out.println
        ("■スーパークラスのみメンバ変数をthis参照(期待値20)");
        System.out.println(this.a);
        System.out.println
        ("■スーパークラスのみメンバ変数をsuper参照(期待値20)");
        System.out.println(super.a);
        System.out.println
        ("■両クラスにあるメンバ変数をthis参照(期待値40)");
        System.out.println(this.b);
        System.out.println
        ("■両クラスにあるメンバ変数をsuper参照(期待値30)");
        System.out.println(super.b);
    }
}

【実行結果】

■引数から与えられた値を参照(期待値10)
10
■自クラスのメンバ変数をthis参照(期待値20)
20
■自クラスのメンバ変数をthis参照(期待値30)
30
■引数から与えられた値を参照(期待値10)
10
■スーパークラスのみメンバ変数をthis参照(期待値20)
20
■スーパークラスのみメンバ変数をsuper参照(期待値20)
20
■両クラスにあるメンバ変数をthis参照(期待値40)
40
■両クラスにあるメンバ変数をsuper参照(期待値30)
30

コメント

タイトルとURLをコピーしました