Java类和子类逻辑

时间:2018-01-08 22:37:09

标签: java logic structure

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

假设我正在开发一款可以制作汽车的应用程序。每辆车都由一些部件(发动机,轮胎......)组成,每个部件都会在某些区域为汽车提供动力(例如发动机提升加速度)。

为了开发这个,我想我可以建立一个“汽车”类,它有一些变量可以容纳汽车配备的组件。然后我创建了一个基类“组件”,它保存了所有组件(它们的重量,大小......)和一些通用函数的共同特征。然后我创建了一些“Components”类的子类,它们定义了一个特定的组件(例如我创建了类“Engines”或“Tires”)。 当然,每个发动机可以是不同的品牌(宝马,奥迪......),每个品牌都有不同的特点(比如说奥迪发动机比宝马发动机加速更快)。

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

例如,如果在构建所有类之后,我注意到我必须为所有引擎添加另一个特性(例如最大速度)我必须更改每个特定品牌引擎的所有子类,但这不是听起来非常“高效”。

4 个答案:

答案 0 :(得分:0)

“经验法则”是:如果存在不同的行为,则需要单独的类。

例如:引擎具有与 Tire 不同的行为,但 Audi引擎具有相同的行为宝马引擎,只是属性“加速量”不同,这是一个配置,而不是行为。

答案 1 :(得分:0)

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

例如,如果您计算的是0-60,那么您将拥有一个通用公式,您可以为其插入特定引擎的加速度参数。不需要单独的AudiEngineBMWEngine类。

OTOH,如果奥迪引擎具有使汽车隐形的附加功能,那么您需要一个特殊的AudiEngine类,并使用特殊的enableInvisibility()方法。

经验法则:如果您发现自己编写了if/else块来检查对象类型并相应地执行不同的操作,则需要子类。

答案 2 :(得分:0)

我认为你可以使用多态和继承。例如,您创建了一类诊所 - 每个都有相同的变量(品牌,权力等)。然后,在调用类构造函数时,您可以初始化变量(分配它们" BMW",130等) 这完全取决于您的应用程序的工作方式。 如果这不是你想要的答案,请指出问题,我会尽力帮助。

答案 3 :(得分:0)

你正走在正确的轨道上,但是你正在做出所有设计师都面临的决定,并且没有明确的答案。

但要扩展,您可以专门定义behaviours ..例如,您可以从基类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 {...}