PHP – 抽象クラス/ポリモーフィズム

抽象クラス

抽象クラスは

  • abstract classキーワードでクラスを定義する
  • abstract定義されたメソッドを含む

たとえば以下のクラスは、RPGのキャラクターをイメージしていて、

  • 固有の名前を持つ
  • 名前を返すpublicメソッドを持つ
  • attack()というabstract宣言されたpublicメソッドを持つ

このクラスからインスタンスを生成しようとすると、Cannot instantiate abstract class CharacterClassとエラーになる。

抽象クラスの継承

先の抽象クラスCharacterClassを継承して、以下の2つのクラスを定義する。

こうすると、Swordfighterクラス、Wizardクラスのインスタンスを生成することができる。

ポリモーフィズム

先の2つのクラス(SwordfighterWizard)のインスタンスを、以下のように配列にしてattack()メソッドを実行してみる。

配列の各要素が具体にどのクラスかを指定しなくても、それぞれのクラスに応じたattack()メソッドが適切に呼ばれている(ポリモーフィズム)。

抽象クラスとポリモーフィズム

  • 抽象クラスはabstractメソッドを含む
  • 抽象クラスを継承したクラスのうち、インスタンスを生成するクラスでは、必ずabstractメソッドを実装しなければならない
  • 実行時にabstractメソッドに対応したメソッドを呼び出すと、インスタンスのクラスを逐一確認しなくても、そのインスタンスのクラスに応じたメソッドが実行される
  • したがって、abstractメソッドの機能の実装は各継承クラスで責任を持ち、それを呼び出す側でケアする必要はない(例外処理などを除けば)

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です