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,您将有一个通用公式,您可以在其中插入特定引擎的加速参数。不需要单独的 AudiEngine
和 BMWEngine
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 {...}
我正在学习 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,您将有一个通用公式,您可以在其中插入特定引擎的加速参数。不需要单独的 AudiEngine
和 BMWEngine
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 {...}