2014-09-05 40 views
-1

假设我们设计了一个停车场班。有两种方法来定义车辆。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)更好,因为它很简单。我应该在面试中使用什么?

回答

0

如果你不需要不同种类的功能用于不同类型的车辆,你不需要继承。

0

您的Vehicle类具有基本方法和属性,如engine(),licensePlate = ''等。所有车辆都将具有这些方法和属性。
现在CarBus类是彼此不同的,所以你CarBus类内延伸Vehicle类具有相同的基本功能,但是,是在特定的功能的不同(如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() 
    { 
     /* ... */ 
    } 
}