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