当用Java编写程序时,如果我有一个特殊情况需要主类不同地处理对象但不需要任何其他方法,那么最好将布尔参数添加到构造函数中吗?诸如isSpecial之类的对象,以及检查对象在主类中是特殊的还是创建一个扩展原始对象的新对象?
示例:
我有一个Cat课程。如果一只猫有胡须,我想打印"这只猫有胡须!"在主班。
拥有一个WhiskerCat类或者只是将一个布尔参数添加到Cat构造函数(例如hasWhiskers)会不会更好?
答案 0 :(得分:1)
只需添加布尔参数即可。你不希望最终会有大量相同的类。例如,在Cat类中,hasWhiskers的默认值应为false,如果它们不调用明确要求它们指定它的构造函数,则保持为false。然后,您可以使用hasWhiskers()
方法返回此布尔属性。
一般情况下,如果新类具有不能简单地添加到原始类的附加功能(其他方法等),则只扩展一个类。
答案 1 :(得分:1)
这是一个责任问题:哪个班级正在做什么? 你的"主要"上课不应该知道" Cat"的内部结构。类。
在您的情况下,这意味着可能需要调整Cat类的实现,以使其具有主类可用于打印该消息的新接口。
然后,Cat类本身可以具有该布尔值,组成该组件的(列表)组件,或者您可以使用继承方式。这很可能取决于真正的问题:还有更多的变化吗?这真的是唯一的区别吗?你上课/考试? (在最后一种情况下,仅仅应用你所教授的方式可能更有用。)
答案 2 :(得分:1)
我认为问题是关于设计模式而不是编码风格。
通常,如果您想在课程中添加一些新功能。
首先,您应该问自己它是一个接口还是一个属性?如果它是一个属性,那么有两种方法可以解决它。
方式1:你提到的子类
方式2:你应该使用委托(即添加一个发型来考虑它是否是一头长毛猫 或者它是短发猫。)
答案 3 :(得分:1)
只是想知道,添加布尔值是识别对象是否特殊的唯一方法吗?当然,必须有其他特性使其与众不同?
无论如何,要知道它是否是主要课程的责任。保留应该打印到Cat类的内容,而不是Main类。
答案 4 :(得分:1)
在我看来,这取决于该属性的特殊程度。
如果我们考虑另一个例子:
车...
属性'天窗'或者' navi'很常见,对汽车没有特殊要求,可能是基类的一部分。
但是警笛和闪光灯是非常罕见的,如果它们是另一个扩展级别的属性,它们会更合适。