ゲームソフトウェア設計論 2013年度定期試験対策要点解説

■確認問題

動物園シミュレーションゲームを作るために,猫と犬を表す Cat クラスと,Dogクラスを定義しよう。
これらのクラスは,動物一般を表す抽象クラス Animal のサブクラス,そしてインタフェイスDrawable を実装する。

 (c)「猫」を表すpublicなクラスCat(Animalのサブクラスで,Drawableを実装する)
   ・Animalのコンストラクタを呼び出すpublicなコンストラクタ Cat( double x, double y )
   ・"Mew mew!"と表示するようにオーバライドしたcry( )メソッド
   ・"(=^^=)"と表示するようにオーバライドしたdraw( )メソッド

 (d)「犬」を表すpublicなクラスDog(Animalのサブクラスで,Drawableを実装する)
   ・Animalのコンストラクタを呼び出すpublicなコンストラクタ Dog( double x, double y )
   ・"Bow wow!"と表示するようにオーバライドしたcryメソッド
   ・"U^エ^U"と表示するようにオーバライドしたdrawメソッド

※問題全体はこちらを参照。


●第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 となる。