実務を行う中で気になることがあったので、調査しました。
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


コメント