ゲームソフトウェア設計論 2013年度定期試験対策要点解説 |
■確認問題
動物園シミュレーションゲームを作るために,猫と犬を表す Cat クラスと,Dogクラスを定義しよう。 (d)「犬」を表すpublicなクラスDog(Animalのサブクラスで,Drawableを実装する) |
※問題全体はこちらを参照。
●第1段階
まず,猫を表す public なクラス Cat を定義してみよう。
・このクラスは,動物一般を表す抽象クラス Animal のサブクラスである。サブクラスの定義方法と「継承」について分からない場合は,「クラスの継承(前編)&(中編)」を見て復習すること。
・では,まずこの Cat クラスを,ただ Animal クラスを継承するだけで,中身はカラの状態で定義してみよう。
・なお,上図右欄の注意書きにあるように ,
この状態だとCat クラスは,Animal から継承した抽象メソッド cry( ) をそのまま持っているので,
抽象クラスとして定義しなければならず,エラーになる。理由については,「抽象クラスと抽象メソッド」参照。
●第2段階
次に,指定された以下の様なコンストラクタを定義する。
・Animalのコンストラクタを呼び出すpublicなコンストラクタ Cat( double x, double y )
要点は次の通り。
・スーパークラスのコンストラクタの呼び出し方は, 「継承とコンストラクタ」参照。
●第3段階
次に,スーパークラス Animal から継承した抽象メソッドをオーバライドして実装を与える。オーバライドの内容は以下の通り。
・"Mew mew!"と表示するようにオーバライドしたcry( )メソッド
要点は次の通り。
・スーパークラスから継承したメソッドのオーバライドについては, 「メソッドオーバライド」参照。
・抽象クラスから継承した抽象メソッドをオーバライドする意味合いについては, 「インタフェイスと実装(再考)」および「抽象クラスと抽象メソッド」参照。
・上図右欄の注意書きにあるように,抽象メソッド cry( ) をオーバライドして通常のメソッドにした事になる。
このため,このクラスには抽象メソッドがひとつも残っておらず,Catクラスは抽象クラスから具体クラスになる事ができた。
●第4段階
次に,インタフェイス Drawable を実装する。
要点は次の通り。
・インタフェイスとその実装方法については,,「インタフェイス型」を参照。
・なお,上図右欄の注意書きにあるように,インタフェイス Drawable を実装したことにより,Cat クラスは,Drawable の抽象メソッド draw( ) を
そのまま継承して持っている事になるので,抽象クラスとして定義しなければならず,ふたたびエラーになる。
●第5段階
次に,インタフェイス Drawable から継承している抽象メソッド draw( ) をオーバライドして実装を与える。オーバライドの内容は以下の通り。
・"(=^^=)"と表示するようにオーバライドしたdraw( )メソッド
要点は次の通り。
・継承したメソッドのオーバライドについては, 「メソッドオーバライド」参照。
・継承した抽象メソッドをオーバライドする意味合いについては, 「インタフェイスと実装(再考)」および「抽象クラスと抽象メソッド」参照。
・インタフェイス Drawable から継承した抽象メソッド draw( ) をオーバライドして実装を与えたので,
draw( ) は通常のメソッドとなった。
結果的に,クラス Cat には抽象メソッドがひとつも残ってはおらず,クラス Cat を抽象クラスとして定義しなくともエラーにはならなくなった。
これで,サブクラス Cat の定義が完了する。
ソースファイル名は,当然,Cat.java となる。
同様に,Dogクラスも以下の様に定義できる。
もちろん,Dogクラスを定義しているソースファイル名はファイル名は Dog.java となる。