gpt4 book ai didi

java - 如何对车辆进行分类——继承与接口(interface)

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:16:02 26 4
gpt4 key购买 nike

我正在尝试对车辆进行分类,但我不确定最好的分类方法是什么。

为什么我很困惑?如果您考虑一下,可以通过多种方式对车辆进行分类:

1) 交通工具的性质:陆上交通工具、水上交通工具和航空交通工具。2) 另一种分类方式:动力车辆和非动力车辆,如拖拉机(非动力且仅与卡车相连)、卡车等。3)车辆装载性质:车辆可装载或不装载。

举个例子:车辆 -> 陆地车辆 -> 动力/非动力 -> 可装载/不可装载。

如果您看到,我正在创建许多子类,但除了可加载或不可加载的属性差异之外,它还有什么用途。我也可以使用接口(interface)来做到这一点。实现 Loadable?powered 接口(interface)到允许加载的车辆。

例如:车辆 -> 陆地车辆 -> 拖拉机LandVehicle 将实现 isPowered 和 isLoadable 等接口(interface),拖拉机将分别将其覆盖为 false 和 true。

我知道继承是针对“isa”关系和接口(interface)是针对“可以做”的,但这在这里有何不同,因为它可以互换使用。

解决此类问题的最佳方法是什么。

最佳答案

解决此类问题的最佳方法是使用 KISS 规则:Keep It Simple Silly!

在这种情况下,对分类中的“主要”部分使用继承,对分类中的“次要”部分使用接口(interface)。这是因为 Java 只允许单继承(主要划分),但对接口(interface)数量没有限制(小部门)类可以实现。

但是,如果您不想为每个类别添加行为,而只想对Vehicle,通过执行以下操作来使用组合:

public class Vehicle {
private List<VehicleDescription> descriptions = new ArrayList<VehicleDescription>();

public void addDescription(VehicleDescription description) {
descriptions.add(description);
}

public boolean hasDescription(VehicleDescription description) {
return descriptions.indexOf(description) > -1;
}

public enum VehicleDescription {
Land, Water, Air, Powered, NonPowered, Loadable, NonLoadable
}

您可以根据需要在您的 Vehicle 类中添加任意数量的“Description”类型枚举列表(这样您就可以避免做类似可加载和不可加载的事情),并且您只需要几个类!

总而言之,尽可能使用组合。

关于java - 如何对车辆进行分类——继承与接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35352882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com