【PHP】メソッドのオーバーライドについて

Pocket

>クラスの使い方について(目次ページ)

前回はクラスの継承について記述しました。クラスの継承はそのままでは単にクラスをコピーしただけです。継承したクラスのメソッドや変数をオーバーライドすることによって、親クラスから基本的な変数やメソッドを継承しつつ、別の機能を持った子クラスを作成することができます。

オーバーライドとは

メソッドの「オーバーライド」とは継承したクラスのメソッドの再定義を行うことです。親クラスから継承したメソッドを上書き、または追加していくことで効率よく別のクラスを作成していくことができます。
サンプルコードを例に見てみましょう。

 

「Player」クラスを継承した「Copy」クラスを作成し、「Copy」クラスから「$tanaka」と「$suzuki」というオブジェクトを作成します。そして「denote_hp()」、「denote_mp()」というメソッドを呼び出し、「$tanaka」のHPを表示し、「$suzuki」のMPを表示します。以下が実行結果になります。

class-step5-3

「Copy」クラスは親クラスである「Player」クラスを継承している為、「Player」クラスのメソッドを使用できます。無事に表示できていますね。

オーバーライドの方法

ここから「Copy」クラスの「denote_hp()」、「denote_mp()」メソッドをオーバーライドによって再定義したいと思います。
オーバーライドの方法は簡単で、「子クラス内に同じメソッド名で処理を記述する」だけです。今回はインスタンスの「HPとMPを100増加させて表示する」メソッドを再定義してみます。「Copy」クラス内に以下のコードを記述します。

この様に継承した子クラスに、親クラスと同じメソッド名で処理内容を記述することでオーバーライドすることができます。
完成形と実行結果を見てみます。

class-step8-1

無事に各数値が100増加して表示され、オーバーライドが正常に行われていることが確認できます。

ちなみに今回はメソッドを上書きしましたが、新たなメソッドを追加していくことで子クラスだけのメソッドを作成することも可能です。

まとめ

  • 親クラスを継承した子クラスの変数やメソッドを再定義することをオーバーライドという
  • 子クラス内に親クラスと同じメソッド名で処理を記述することで、処理内容をオーバーライド(上書き)することができる

 

エッグ

シェアする

コメントを残す

メールアドレスが公開されることはありません。

コメントする