【PHP/演習問題】インターフェース[2]
問題
次の実行結果になるプログラムを作成してください。
なお、下記条件を満たすものとします。
- 下記表のクラス・インターフェースを作成する
- 実行結果になるように各クラスのインスタンスを使う
種類 | 名前 | 英記 | 継承元 | インターフェース | フィールド | メソッド |
---|---|---|---|---|---|---|
インターフェース | 車機能 | CarMethod | – | – | – | ・display_distance()
・run_distance() ・run() |
抽象クラス | 車クラス
|
Car |
なし | CarMethod | ・$distance (移動距離)
※ 初期値は0 ・ $acceleration (加速度)
※ 初期値は60 |
・display_distance()
→ $distance の値を出力
・ run()
→ run_distance() で前進距離を取得し出力する。また、$distanceに前進距離を加算 |
具象クラス | スポーツカークラス | SportCar |
Car |
– | なし | ・run_distance()
→ 前進距離を計算 → 計算式は $acceleration * 1.2 |
具象クラス | ファミリーカークラス | FamilyCar |
Car |
– | なし | ・run_distance()
→ 前進距離を計算 → 計算式は $acceleration * 0.8 |
===== スポーツカー =====
72km進みます。
72km進みます。
移動距離 : 144km
===== ファミリーカー =====
48km進みます。
48km進みます。
移動距離 : 96km
解答例
<?php
interface CarMethod {
public function display_distance();
public function run_distance();
public function run();
}
abstract class Car {
public $distance = 0;
public $acceleration = 60;
function display_distance() {
echo '移動距離 : '.$this->distance."km\n";
}
function run() {
$run_distance = $this->run_distance();
echo $run_distance."km進みます。\n";
$this->distance += $run_distance;
}
}
class SportCar extends Car {
function run_distance() {
return $this->acceleration * 1.2;
}
}
class FamilyCar extends Car {
function run_distance() {
return $this->acceleration * 0.8;
}
}
echo "===== スポーツカー =====\n";
$sport_car = new SportCar();
$sport_car->run();
$sport_car->run();
$sport_car->display_distance();
echo "===== ファミリーカー =====\n";
$family_car = new FamilyCar();
$family_car->run();
$family_car->run();
$family_car->display_distance();
?>