2012-08-04 94 views
0

父类 - >车辆| 子类 - >车载&自行车在面向对象编程方面哪种方法更好?

如果类汽车需要startCar()方法(其输出 一个的值字符串“BRUMM”调用时),甚至类 自行车需要一个类似的方法startBike()(其输出 值为'TRUMM'时调用)是否更好 这样去做,或者改为在超类Vehicle中的startVehicle() 方法,其中 的不同编码为各自的子类的不同输出:汽车和自行车?

编辑:自行车指而不是使用startCar()和startBike()[和startVehicle()]分别向马达自行车

+0

你如何开始骑自行车? – 2012-08-04 08:12:44

+0

有摩托自行车,特别是在中国。关于这个话题:你的例子很明显,但是你不应该为了oop而产生泛化和基类。想想有人会使用它 – 2012-08-04 08:33:02

+0

如果我引起任何混淆,我很抱歉,我实际上指的是摩托车,在世界许多地方俗称摩托车,摩托车广泛用作交通工具。为了防止任何进一步的问题,我在我的问题上附加了一条注释。 – 2012-08-04 08:42:55

回答

4

首先,该函数可以[和应]刚刚被称为 '启动()' (例如Car.start(),Bike.start(),Vehicle.start()),因为每个函数都有相同的意图,并且被设计为给出相同类型的输出。

现在,如果大多数/所有的子类都要实现启动函数,那么我建议在超类中创建start()函数,然后在子类中重写它。另外,如果Car.start()和Bike.start()共享相同功能(但不是全部)的相同功能(例如,它们都启动某种引擎),那么将类似的代码放入车辆。开始()。然后,当您编写Car.start()和Bike.start()来覆盖Vehicle.start()时,相应的函数应该在调用Vehicle.start()方法之前运行它们的类特定代码。

P.S.肯定做而不是编码超类的start()函数根据类的实际类型输出不同的值;基本上超类不应该知道子类...否则,有什么意义? :)

+1

好的答案! +1。 – 2012-08-04 08:25:21