OOD - почему автомобиль / автобус / мотоцикл должен происходить от автомобиля

Предположим, мы проектируем класс парковки. Есть два способа определения транспортных средств.

1)

Abstract class Vehicle {
        protected int size;
        private string plate;
        ...
}
class car : Vehicle{
     car(){base.size = enum.carSize;} 
 }
class bus: Vehicle{
     bus(){base.size = enum.busSize;} 
 }

2)

class Vehicle {
        private int size;
        protected string plate;
        public setSize(int size);
}

Тогда в классе парковки мы можем определить

       Vehicle Car;
       vehicle Bus;

Какой из них лучше? Я вижу, 1) используется в "взлома интервью по кодированию". Но я вижу 2) лучше как это просто. Что я должен использовать в интервью?

2 ответа

Если вам не нужны разные виды функциональности для разных видов транспортных средств, вам не нужно наследование.

Ваш Vehicle класс имеет базовые методы и атрибуты, такие как engine(), licensePlate = '' и так далее. Все транспортные средства будут иметь эти методы и атрибуты.
Сейчас Car а также Bus класс отличается друг от друга, поэтому вы расширяете Vehicle класс в Car а также Bus классы должны иметь одинаковую базовую функциональность, но различаться в определенной функциональности (например, Car могу иметь stereoType = '' в то время как Bus могу иметь hasSecondFloor = true,

class Vehicle {
    private $licensePlate;
    public function startEngine()
    {
        /* ... */
    }

    public setLicensePlate()
    {
        /* ... */
    }
}

class Car extends Vehicle {
    public function _construct()
    {
       $this->setLicensePlate('ABC-123');
       $this->startEngine();
    }

    public function turnOnStereo()
    {
        /* ... */
    }
}
Другие вопросы по тегам