我正在学习Java类,我想到了这个例子:
假设我正在开发一款可以制作汽车的应用程序。每辆车都由一些部件(发动机,轮胎......)组成,每个部件都会在某些区域为汽车提供动力(例如发动机提升加速度)。
为了开发这个,我想我可以建立一个“汽车”类,它有一些变量可以容纳汽车配备的组件。然后我创建了一个基类“组件”,它保存了所有组件(它们的重量,大小......)和一些通用函数的共同特征。然后我创建了一些“Components”类的子类,它们定义了一个特定的组件(例如我创建了类“Engines”或“Tires”)。 当然,每个发动机可以是不同的品牌(宝马,奥迪......),每个品牌都有不同的特点(比如说奥迪发动机比宝马发动机加速更快)。
现在问题是,我是否必须为每个品牌引擎创建不同的子类?我当然可以,但这是构建这些“结构”的正确方法吗?
例如,如果在构建所有类之后,我注意到我必须为所有引擎添加另一个特性(例如最大速度)我必须更改每个特定品牌引擎的所有子类,但这不是听起来非常“高效”。
答案 0 :(得分:0)
“经验法则”是:如果存在不同的行为,则需要单独的类。
例如:引擎具有与 Tire 不同的行为,但 Audi引擎与具有相同的行为宝马引擎,只是属性“加速量”不同,这是一个配置,而不是行为。
答案 1 :(得分:0)
如果差异可以用同一个数据属性的不同值表示,并且不需要不同的代码路径来处理这些值,那么您就不需要单独的子类。
例如,如果您计算的是0-60,那么您将拥有一个通用公式,您可以为其插入特定引擎的加速度参数。不需要单独的AudiEngine
和BMWEngine
类。
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 {...}