|
|
オブジェクト、クラス、インタフェース |
次のコード例では、isEmpty()とpop()メソッドのメソッド本体は太字で示される。通常の Java 言語の要素に加えて、現在のオブジェクトでメンバを参照するためにメソッド本体でclass Stack { static final int STACK_EMPTY = -1; Object stackelements[]; int topelement = STACK_EMPTY; . . . boolean isEmpty() { if (topelement == STACK_EMPTY) return true; else return false; } Object pop() { if (topelement == STACK_EMPTY) return null; else { return stackelements[topelement--]; } } }thisを使用することができる。 現在のオブジェクトはそのメソッドが呼び出されているオブジェクトである。 現在のオブジェクトが隠した、あるいはオーバーライドしたスーパークラスのメンバを参照するためにsuperも使用できる。 また、メソッド本体にはそのメソッドのローカル変数の宣言を含むことがある。this
一般に、オブジェクトのメソッド本体内で、オブジェクトのメンバ変数を直接参照することができる。 しかし、メソッドの引数が同一名ならば、メンバ変数名を明確にする必要がある。例えば、次の HSBColor クラスのコンストラクタは、コンストラクタに渡される引数に従ってオブジェクトのメンバ変数を初期化する。 コンストラクタへの各引数は、初期値を含むオブジェクトのメンバ変数と同一名である。
メンバ変数class HSBColor { int hue, saturation, brightness; HSBColor (int hue, int saturation, int brightness) { this.hue = hue; this.saturation = saturation; this.brightness = brightness; }hueと引数hueを明確にしなければならないので、このコンストラクタではthisを使用しなくてはならない(他の引数も同様)。hue = hue;と書くのは意味がない。 引数は優先度が高く、同一名のメンバ変数を隠す。 これにより、メンバ変数を参照するために、明示的に現在のオブジェクト −this− を通して行わなくてはならない。参照のあるメソッドを含むオブジェクトのメンバ変数を参照する際に、常に
thisを使用することを好むプログラマがいる。 これによってコードの主旨が明確になり、名前の共用に基づいたエラーが削減される。現在のオブジェクトのメソッドを呼び出すためにも
thisを使用する。 これは、メソッド名に曖昧さがある場合にのみ必要なだけであって、コードの主旨をより明確にするためにしばしば使用される。super
メソッドがスーパークラスのメンバ変数を隠す場合、メソッドはsuperを使用してかげの変数を参照することができる。 同様に、メソッドがそのスーパークラスのメソッドをオーバーライドする場合、メソッドはsuperを使用してオーバーライドされたメソッドを呼び出すことができる。次のクラスを例にとる。
そしてclass ASillyClass { boolean aVariable; void aMethod() { aVariable = true; } }aVariableを隠し、aMethod()をオーバーライドするサブクラスも考慮する。最初にclass ASillierClass extends ASillyClass { boolean aVariable; void aMethod() { aVariable = false; super.aMethod(); System.out.println(aVariable); System.out.println(super.aVariable); } }aMethod()がaVariable(ASillyClass で宣言されたものを隠す ASillierClass で宣言した変数)をfalseに設定する。 次のaMethod()がこの文でオーバーライドされたメソッドを起動する。これにより、super.aMethod();aVariableの隠されたバージョン(ASillyClass で宣言したもの)をtrueに設定する。 その時aMethodが異なる値を持つaVariableの両方のバージョンを表示する。false trueローカル変数
メソッドの本体内で、そのメソッド内で使用する複数の変数を宣言することができる。 これらの変数はローカル変数であって、制御がメソッド内にある場合にのみ有効である。 次のメソッドが、その配列引数の要素に操作を繰り返すためにローカル変数iを宣言する。このメソッドがリターンした後には、i はもう存在しない。Object findObjectInArray(Object o, Object[] arrayOfObjects) { int i; // local variable for (i = 0; i < arrayOfObjects.length; i++) { if (arrayOfObjects[i] == o) return o; } return null; }
![]()
オブジェクト、クラス、インタフェース