Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在100+;现有课程?_Java_Oop_Variables_Inheritance_Design Patterns - Fatal编程技术网

Java 如何在100+;现有课程?

Java 如何在100+;现有课程?,java,oop,variables,inheritance,design-patterns,Java,Oop,Variables,Inheritance,Design Patterns,我正在构建一个Java程序,通过单独检查每个部件来检查汽车是否有先前的损坏。每个部分都被划分为自己的类 汽车零件类别选择的UML图: 我的问题是,每个零件都已经存在,需要一个名为“损坏”的布尔值。是否有一种更快的方法将伤害变量分配给每个类别,而不是一个一个地分配?您是否可以创建一个带有布尔值的EnginePartHealth,例如,您可以添加到每个需要它的零件 如果可以的话,选择合成而不是继承。。看来你已经在做了。这将使您的设计更加灵活。使用包含运行状况指示器的父类也可能有效,但灵活性往往较低

我正在构建一个Java程序,通过单独检查每个部件来检查汽车是否有先前的损坏。每个部分都被划分为自己的类

汽车零件类别选择的UML图:


我的问题是,每个零件都已经存在,需要一个名为“损坏”的布尔值。是否有一种更快的方法将伤害变量分配给每个类别,而不是一个一个地分配?

您是否可以创建一个带有布尔值的
EnginePartHealth
,例如,您可以添加到每个需要它的零件

如果可以的话,选择合成而不是继承。。看来你已经在做了。这将使您的设计更加灵活。使用包含运行状况指示器的父类也可能有效,但灵活性往往较低。。。但它可能仍然适用于您,并且需要更少的编码。。您可能需要添加一些中间类,作为要在其上维护引擎运行状况的任何零件的父类。。。如果你把
Mirror
作为
CarPart
的一个子类,并且它自动继承了健康状况,那么你可能会得到一堆父类,用于对大量项目进行分组,这会使事情变得难以理解。。。在可能的情况下,支持组合而不是继承

然后,您可以按照
健康
的思路创建一个接口,该接口将使您能够对实现该接口的所有类执行健康相关操作(您将在应用程序的某个高层存储该接口,以便更轻松地测量健康状况-在列表/地图中,具体取决于您希望如何访问这些部件的健康状况).

您可以使用方法
isDamaged()
定义可检查的接口
。您的程序可以对此
Inspectable.isdamage()
进行回复,但不能回复实际的
损坏属性。正如你提到的,有100多个类别,因此汽车零件可能有不同的形式。您可以在方法中放置业务逻辑并提供灵活性。对于布尔变量,它只有true或false,没有太多变化


定义另一个类
CarPart
,该类实现
可检查的
,并具有私有
损坏
属性。它服务于应用程序中所有汽车零件的超类。如果
CarPart.isDamaged()
不适合某些子类的需要,他们可以覆盖它并实现自己版本的
isDamaged()

虽然这两个选项(公共父类和接口实现)在技术上都可以工作,但公共父类更适合您的情况。接口实现主要是定义公共行为,而在您的情况下,您需要定义公共状态。

所有的汽车零件子类都属于
CarPart
类吗?如果不是,他们应该是。这样,您只需向顶级类添加一个布尔实例变量,所有子类都将继承它。好的设计实践几乎总能让你避免重复100次输入同样的东西。我刚刚输入了一个类似的答案。如果没有
CarPart
super类,您仍然需要修改每个类。但既然你无论如何都要这么做,那么你真的应该在这种情况下使用继承。谢谢Charlie!不,他们不是。那是个好主意。非常感谢。谢谢你,格雷格!我感谢您的反馈!很有帮助