Java 类 和 sub类 逻辑

Java classes and subclasses logic

我正在学习 Java classes,我想到了这个例子:

假设我正在开发一款可以制造汽车的应用程序。每辆车都由一些部件(发动机、轮胎……)组成,每个部件都在某些方面为汽车提供助力(例如发动机提高加速度)。

为了开发这个,我想我可以构建一个 class "Cars",它有一些变量来保存汽车配备的组件。然后我创建了一个基础 class "Components" ,它拥有所有组件共有的特征(它们的重量、大小……)和一些通用功能。然后我创建了 "Components" class 的一些子 classes 定义了一个特定的组件(例如我创建了 class "Engines" 或 "Tires" ). 当然每个引擎可以是不同品牌的(宝马,奥迪,...)并且每个品牌都有不同的特性(假设奥迪引擎比宝马引擎加速更快)。

现在的问题是,我是否必须为每个品牌引擎创建不同的子class?我当然可以,但是 这是构建这些 "structures" 的正确方法吗?

例如,如果在构建所有 classes 之后,我注意到我必须向所有引擎添加另一个特性(例如最大速度),我必须更改所有子 [=每个特定品牌引擎的 32=]es,但这听起来不是很 "efficient"。

"rule of thumb" 是:如果有不同的 行为 ,则需要单独的 类。

例如:引擎的行为轮胎不同,但奥迪引擎[=21] =] 与 BMW 引擎 具有相同的行为,只是 属性 "amount of acceleration" 不同,这是 配置,不是行为。

如果差异可以用同一个数据属性的不同值表示,并且不需要需要不同的代码路径来处理这些值,那么您不需要单独的子class对他们来说。

例如,如果您正在计算 0-60,您将有一个通用公式,您可以在其中插入特定引擎的加速参数。不需要单独的 AudiEngineBMWEngine classes.

OTOH,如果 Audi 引擎具有使汽车隐形的附加功能,那么您确实需要一个特殊的 AudiEngine class,以及一个特殊的 enableInvisibility() 方法。

经验法则:如果您发现自己正在编写 if/else 块来检查对象类型并相应地做不同的事情,您需要 subclasses。

我认为你可以使用多态和继承。例如,您创建了 class 个 slinics - 每个都有相同的变量(品牌、功率等)。然后,当调用 class 构造函数时,您可以初始化变量(将它们赋值 "BMW"、130 等) 这完全取决于您的应用程序的工作方式。 如果这不是您想要的答案,请说明问题,我会尽力提供帮助。

你走在正确的轨道上,但你运行陷入了所有设计师都面临的决定,而且没有明确的答案。

但要扩展,您可以专门定义 behaviours.. 例如,您可以从基础 class car 开始。那么你可以定义一个接口,例如:

interface driveable
{
     void drive(engine type_of_engine, tire type_of_tire);
}

interface moddable
{
    void tune(exhuast type_of_exhaust);
}

然后 car:

class car : driveable
{
    void drive(...)
}

class bmw : car {...}
class audi : car, moddable {...}