超类 -> 车辆 | 子类 -> 汽车和自行车
如果 Car 类需要一个 startCar() 方法(在调用时会输出一个值“BRUMM”的字符串),甚至 Bike 类也需要一个类似的方法 startBike()(在调用时会输出一个值“TRUMM”的字符串)最好以这种方式进行,或者在超类 Vehicle 中有一个 startVehicle() 方法,该方法针对各个子类的不同输出进行不同的编码:汽车和自行车?
编辑:自行车是指摩托车
超类 -> 车辆 | 子类 -> 汽车和自行车
如果 Car 类需要一个 startCar() 方法(在调用时会输出一个值“BRUMM”的字符串),甚至 Bike 类也需要一个类似的方法 startBike()(在调用时会输出一个值“TRUMM”的字符串)最好以这种方式进行,或者在超类 Vehicle 中有一个 startVehicle() 方法,该方法针对各个子类的不同输出进行不同的编码:汽车和自行车?
编辑:自行车是指摩托车
首先,不是分别使用 startCar() 和 startBike() [和 startVehicle()],该函数可以 [并且应该] 只称为“start()”(例如 Car.start()、Bike.start()、Vehicle .start()),因为每个函数都有相同的意图,并且旨在提供相同类型的输出。
现在,如果您的大多数/所有子类都将实现启动函数,那么我建议在超类中创建 start() 函数,然后在子类中覆盖它。
此外,如果 Car.start() 和 Bike.start() 共享很多(但不是全部)相同的功能(例如,它们都启动某种引擎),那么将相似的代码放入 Vehicle.start() . 然后,当您编写 Car.start() 和 Bike.start() 来覆盖 Vehicle.start() 时,相应的函数应在运行其特定于类的代码之前调用 Vehicle.start() 方法。
PS 绝对不要编写超类的 start() 函数来根据类的实际类型输出不同的值;基本上,超类不必知道子类……否则,有什么意义?:)