名前のシャドウイング
メンバー変数は、特に関数の引数でローカル変数によりシャドウイングできます。これにより、標準 Java 形式のメソッドやコンストラクターは次のように処理されます。
1Public Class Shadow {
2 String s;
3 Shadow(String s) { this.s = s; } // Same name ok
4 setS(String s) { this.s = s; } // Same name ok
5}1 つのクラスのメンバー変数は、親クラスの同じ名前のメンバー変数をシャドウイングできます。これは、2 つのクラスが異なる最上位クラスにあり、異なるチームによって記述されている場合に有用です。たとえば、一方にはクラス C への参照が含まれており、親クラス P のメンバー変数 M (C のメンバー変数と同じ名前) へアクセスするとします。参照は、まず P への参照から割り当てます。
静的変数はクラス階層全体でシャドウイングできます。そのため、P で静的 S を定義した場合、サブクラス C も静的 S を宣言することができます。C 内の S への参照は、その静的変数を参照します。P 内の S を参照するには、構文 P.S を使用する必要があります。
静的クラス変数は、クラスインスタンスを介して参照することはできません。本来の変数名自体 (最上位クラスのファイル内) またはクラス名をつけたプレフィックスを使用して参照する必要があります。次に例を示します。
1public class p1 {
2 public static final Integer CLASS_INT = 1;
3 public class c { };
4}
5p1.c c = new p1.c();
6// This is illegal
7// Integer i = c.CLASS_INT;
8// This is correct
9Integer i = p1.CLASS_INT;