17.
インスタンスメソッド
インスタンスメソッド
クラスメソッドとは
OOPのメソッドは「歩く」「話す」「戦う」といった、オブジェクトの動作や振る舞いのことを指します。クラスメソッドは、クラス内に定義したメソッドのことを指します。
メソッドの例
項目 | メソッド | 備考 |
---|---|---|
歩く | walk | スピード、方向などでキャラクターを移動する |
話す | talk | 内容、相手などを指定して会話する |
攻撃する | attack | キャラクターの能力、武器などから、相手に攻撃する |
インスタンスメソッドとは
クラスインスタンスで実行できるメソッドをインスタンスメソッドといいます。
インスタンスメソッドの定義
インスタンスメソッドは「修飾子」「メソッド名」「データ型」でクラス内に定義します。
自分のクラスのフィールドにアクセス
インスタンスを生成するとフィールドにアクセスできますが、自分のクラス内ではthisでアクセスできます。
インスタンスメソッドの基本
インスタンスメソッドの定義
Characterクラスにインスタンスメソッドを定義します。
項目 | メソッド名 | 引数 | 戻り値型 | アクセス修飾子 |
---|---|---|---|---|
歩く | walk | String direction | void | public |
話す | talk | Character character, String message | void | public |
攻撃する | attack | Character character | void | public |
インスタンスメソッドの実装
Characterクラスに walk() メソッドを実装します。
Character.java
staticメソッドではアクセスできない
walk() をstaticメソッドで定義した場合は、thisではアクセスできません。インスタンスに関係なく動作する仕様なので、コンパイルエラーになります。
インスタンスメソッドの実行
インスタンスメソッドはインスタンスで実行します。 staticメソッドではないので、メソッド名で直接実行できません
メインメソッドで実行
wizardインスタンスでインスタンスメソッドを実行します。
App.javaを実行して、インスタンスメソッドの実行を確認してみましょう。
結果
インスタンスと引数
インスタンスを引数で渡す
インスタンスそのものを、メソッドの引数に渡すことができます。
talk() メソッドの実装
Characterオブジェクトとメッセージを引数にした、talk() メソッドを定義します。
Character.java
talk() メソッドの実行
App.javaのメインメソッドで新しいキャラクターwarriorを作成し、talk() メソッドに渡してみましょう。
App.java
結果
インスタンスの参照
インスタンスはメモリーに保持
インスタンスはJavaのメモリーに状態を保持され、このインスタンスのメモリの場所を表す値を参照といいます。インスタンスが別のファイルで処理されたとしても、その状態は常に保持されます。
attack() メソッドの実装
attack() メソッドを実装し、引数で渡された Characterオブジェクトのhpを計算します。ここでは、変数damageの値だけ引き算しました。
Character.java
attack() メソッドの実行
attack() メソッドにwarriorオブジェクトを渡して実行します。これはwizardがwarriorに攻撃することを意味します。
App.java
warriorオブジェクトのhpの数値が変化しました。
結果
ソース
Character.java
App.java
演習
つぎのプログラムをみて回答してください。
Animal.java
AnimalApp.java
問題1
Animalクラスの walk() のことを何といいますか?
- staticメソッド
- フィールド
- インスタンス
- インスタンスメソッド
問題2
AnimalApp.java を実行した結果はどれですか?
- わん! ポチが歩いた にゃー!
- わん! ポチが歩いた にゃー!ミケが逃げた
- ポチが歩いた わん! にゃー!ミケが逃げた
- ポチが歩いた わん! ミケが逃げた