ポリモーフィズムの前提知識

 ポリモーフィズムは多態性、多様性などとも呼ばれます。異なるオブジェクトでもある同じ名前のメソッドを呼び出すことにより、異なる結果を得ることができます。

 次のサンプルでは、加速するための関数に車オブジェクトとバスオブジェクトそれぞれを渡すと、それぞれのオブジェクトとして動作することを確認できます。

○ ファイル

 「OverrideTest.php」ファイルをコピーして、「PolymorphismTest.php」を作成し、次のように修正してください。

ファイルの種類 PHPファイル
ファイル名 PolymorphismTest.php

サンプルダウンロード

○ 作成の準備

 「OverrideTest」プロジェクトより、Car.csとBus.csをコピーしてプロジェクトに追加してください。(2.3で作成した「InstanceTest」プロジェクトの作成方法を参考にしてください。)

○ プログラム

 次のようにプログラムを記述してください。

PolymorphismTest.php

  1. <body>
  2. <?php
  3. //車・バスを加速して状態を表示する関数
  4. function testVehicle($vehicle){
  5.  //加速する
  6.  print('加速します!<br>');
  7.  $vehicle -> speedUp(20);
  8.  //状態を表示する
  9.  print('スピード:' . $vehicle -> getSpeed() . 'km<br>');
  10.  print('ガソリン:' . $vehicle -> getGas() . 'L<br>');
  11. }
  12. //車インスタンスを生成する
  13. $car = new Car(30);
  14. print('<b>=====車=====</b><br>');
  15. for($i=0; $i<5; $i++){
  16.  testVehicle($car);
  17. }
  18. print('<hr>');
  19. //バスインスタンスを生成する
  20. $bus = new Bus(150);
  21. print('<b>=====バス=====</b><br>');
  22. for($i=0; $i<5; $i++){
  23.  testVehicle($bus);
  24. }
  25. ?>
  26. </body>

○ 実行結果

実行結果
実行結果

○ 解説

 14~22行目では加速して状態を表示する関数を定義しています。今までこの関数は、車、バスそれぞれのために用意してきました。今回はどちらもサポートできるように準備しました。17行目で加速をしていますが、実行時に車、バスどちらのオブジェクトがセットされるかによって結果が異なります。バスがセットされた場合は60km/h以上は加速しないことを確認できます。20、21行目の状態を取得するメソッドも同様に、車がセットされれば車の状態を、バスがセットされればバスの状態を取得します。

 このように、実行時にセットされたオブジェクトによって呼び出される処理が異なるため、同じ動作を指定しても結果が異なるという状況を作り出すことができます。これを利用してポリモーフィズムを実現させます。

前へ   次へ