Previous | Next | Trail Map | Writing Java Programs | オブジェクト、クラス、インタフェース


メソッド宣言

メソッド宣言はメソッドに対し、コンパイラ、ランタイムシステムおよび他のクラスとオブジェクトについて多くの情報を提供する。 メソッドの名前に加えて、メソッド宣言はメソッドの返り値、メソッドが必要とする引数の数と型、メソッドを呼び出せる他のクラスとオブジェクトなどの情報を伝える。

これはクラスのメソッドを宣言するよりむしろ小説を書いているように見えるかも知れないが、ほとんどのメソッド属性が暗黙に宣言することができる。 メソッド宣言に必要な2つの要素は、メソッド名とメソッドによって返されるデータ型である。 例えば次の例では、stack クラス内で論理値( true あるいは false )を返す isEmpty() と指定されたメソッドを宣言する。

class Stack {
    . . .
    boolean isEmpty() {
        . . .
    }
}

メソッドからの値の返却

Java では、メソッドが返す値のデータ型を宣言することを要求する。 メソッドが値を返さないようにするには、void を返すように宣言することができる。

メソッドは、プリミティブデータ型あるいは参照データ型のいずれかの値を返すことができる。 Stack クラスでの isEmpty() メソッドは、プリミティブデータ型の論理値を返す。

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;
    }
}

一方、 Stack クラスでの pop() メソッドは参照データ型のオブジェクトを返す。

class Stack {
    static final int STACK_EMPTY = -1;
    Object stackelements[];
    int topelement = STACK_EMPTY;
    . . .

    Object pop() {
        if (topelement == STACK_EMPTY)
            return null;
        else {
            return stackelements[topelement--];
        }
    }
}

メソッドは値を返すために return演算子 を使用する。void と宣言されていないメソッドは return 文を含まなくてはならない。

return文が返す値のデータ型は、メソッドが返すために取り込むデータ型と一致しなくてはならない。整数を返すと宣言されたメソッドから Object を返すことはできない。 オブジェクトを返す時には、返されるオブジェクトのデータ型は、サブクラスあるいは示された正確なクラスのどちらかでなくてはならない。 インタフェース型を返す時には、返されるオブジェクトは指定されたインタフェースを実装しなくてはならない。

メソッドの名前

メソッド名は正当な Java の識別子であればどれでもよい。 Java メソッド名に関して考慮すべき3つの特別なケースがある。

  1. Java がメソッド名のオーバーロードをサポートするので、多数のメソッドが同一名を共有することができる。 例えば、描画領域に種々のタイプのデータ(文字列、整数など)を描画することができるクラスを書いていたと仮定する。 あなたはそれぞれのデータ型を描画する方法を認識しているメソッドを書く必要がある。ほかの言語では、 drawString() drawInteger() drawFloat ()など、各メソッドの新規名を考えなければならない。 Java において、すべての描画メソッドに同一名を使用することができるが、それぞれのメソッドに異なったタイプのパラメータで渡すことができる。 これにより、データ描画クラスでは、 draw() という名前のメソッドを3つ宣言することができ、それぞれが異なった型のパラメータを取る。


    class DataRenderer {
    void draw(String s) {
    . . .
    }
    void draw(int i) {
    . . .
    }
    void draw(float f) {
    . . .
    }
    }

    注釈: メソッド宣言の括弧内の情報は、メソッドに対する引数である。 引数については次のページの メソッドへの情報の引き渡しで説明する。

メソッドはメソッドに渡す引数の数と型によって、コンパイラで区別される。 したがって、 draw( String s )draw( int 、i、) は別個の一意のメソッドである。 同じシグニチャで複数のメソッドを宣言することはできない。draw( String s )draw( String t ) は同一なので、コンパイラエラーをもたらす。 オーバーロードしたメソッドが同じデータ型を返さなくてはならないのに注意しよう。つまり、 同じクラスで宣言されたdraw( String s )int draw( String t ) はコンパイル時エラーをもたらす。

  • クラスと同じ名前を持つメソッドはコンストラクタであり、特別な実行義務がある。 コンストラクタはクラスの型の新規のオブジェクトを初期化するために使用される。 コンストラクタは Java の new 演算子 で呼び出すことができる。 前述のオブジェクトの作成でオブジェクトを作成する方法を学習した。 コンストラクタを書く方法を学習するためには、コントラクタメソッドの書き方を参照のこと。

  • クラスはそのスーパークラスでオーバーライドすることがある。 オーバーライドするメソッドは、オーバーライドするメソッドと同じ名前、返却値の型およびパラメータリストを持っていなくてはならない。メソッドのオーバーライド では、クラスのスーパークラスでメソッドをオーバーライドする方法を説明する。
  • メソッド宣言の高度な機能

    メソッド宣言の2つの必須要素に加えて、メソッド宣言が同様に他の要素を含むことがある。 これらの要素は、メソッドがクラスメソッドかどうかなど、メソッドが受け入れる引数を宣言する。

    結局、メソッド宣言は次のようになる。

    [accessSpecifier] [static] [abstract] [final] [native] [synchronized] returnType methodName ([paramlist]) [throws exceptionsList]

    メソッド宣言のそれぞれの要素については、この入門書の要所で説明する。 次のリストでの最初の 4 つのリンクはこのレッスンで説明する。 ページの上下にある左右の矢印マークのリンクを使用すれば、これらの4つの節を見ることができる。

    リストの最後の3つのリンクは、レッスンに必要なトピックス、あるいは別のレッスンですでにクリティカルであったトピックスを説明する。 これらのリンクを選択すると、この入門書のさまざまなページに移ることができる。 必ず戻って来ること!



    Previous | Next | Trail Map | Writing Java Programs | オブジェクト、クラス、インタフェース