Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当一个类不希望在其超类中声明所有方法时,如何将其视为子类?_Java_Design Patterns_Polymorphism - Fatal编程技术网

Java 当一个类不希望在其超类中声明所有方法时,如何将其视为子类?

Java 当一个类不希望在其超类中声明所有方法时,如何将其视为子类?,java,design-patterns,polymorphism,Java,Design Patterns,Polymorphism,如果我想将ToyTruck视为Truck的子类,但我不想在Truck类中声明所有方法,该怎么办?。例如,Truck类有一个方法addgalpaline(),但是aToyTruck不需要汽油来工作。我得到的一个解决方案是,我将只重写addgallery()方法,并将其作为空方法实现。但对我来说,这并不意味着ToyTruck没有方法addgalpaline()。我认为还有一个解决方案是将其作为一个组合,但我不知道从何处开始,以及如何使用组合使用多态性。在这种情况下,ToyTruck不是一个卡车,可能

如果我想将
ToyTruck
视为
Truck
的子类,但我不想在
Truck
类中声明所有方法,该怎么办?。例如,
Truck
类有一个方法
addgalpaline()
,但是a
ToyTruck
不需要汽油来工作。我得到的一个解决方案是,我将只重写
addgallery()
方法,并将其作为空方法实现。但对我来说,这并不意味着
ToyTruck
没有方法
addgalpaline()
。我认为还有一个解决方案是将其作为一个组合,但我不知道从何处开始,以及如何使用组合使用多态性。

在这种情况下,ToyTruck不是一个卡车,可能不应该是一个子类。相反,考虑制作一组描述你的卡车的界面。例如
可移动

您还可以将卡车抽象为第三类,称为
LargeTruck
,它表示实际的卡车

如果这不是一个选项,您可以考虑在ToyTruck中重写<代码> AdGaSoLoIn()/<代码>,并使其抛出<代码> unService操作异常>代码>,但是这并不妨碍该方法被调用,它只是使它过早失效。


<>请考虑ToyTruck是否是有意义的一个子类:代码>卡车>代码>。“如果它看起来像鸭子,嘎嘎声像鸭子,但需要电池——你可能有错误的抽象概念。”无法想象一个玩具和真卡车混合的商业领域。以及如何处理柴油卡车和电动卡车?非常感谢,我想我会试试你的第一个建议