【PHP/演習問題】オーバーライド[2]

【PHP/演習問題】オーバーライド[2]

問題

次の実行結果になるプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 下記表の3つのクラスを作成する
  • 実行結果になるように各クラスのインスタンスを使う
クラス 英記 継承元 フィールド メソッド
車クラス Car なし $distance(移動距離)
※ 初期値は0
$acceleration(加速度)
※ 初期値は60
display_distance()
→ $distanceの値を出力
run_distance()
→ 前進距離を計算
→ 計算式は$acceleration * 1.0
run()
→ run_distance()で前進距離を取得し出力する。また、$distanceに前進距離を加算
スポーツカークラス SportCar Car なし run_distance()
→ 前進距離を計算
→ 計算式は$acceleration * 1.2
ファミリーカークラス FamilyCar Car なし run_distance()
→ 前進距離を計算
→ 計算式は$acceleration * 0.8
===== 車       =====
60km進みます。
60km進みます。
移動距離 : 120km
===== スポーツカー  =====
72km進みます。
72km進みます。
移動距離 : 144km
===== ファミリーカー =====
48km進みます。
48km進みます。
移動距離 : 96km

解答例

<?php

class Car {
    
    public $distance = 0;
    
    public $acceleration = 60;
    
    public function display_distance() {
        echo '移動距離 : '.$this->distance."km\n";
    }
    
    public function run_distance() {
        return $this->acceleration * 1.0;
    }
    
    public function run() {
        $run_distance = $this->run_distance();
        echo $run_distance."km進みます。\n";
        $this->distance += $run_distance;
    }
    
}

class SportCar extends Car {
    
    public function run_distance() {
        return $this->acceleration * 1.2;
    }
    
}

class FamilyCar extends Car {
    
    public function run_distance() {
        return $this->acceleration * 0.8;
    }
    
}

echo "===== 車       =====\n";
$car = new Car();
$car->run();
$car->run();
$car->display_distance();

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();

?>