想象一下,您有Person
类,其中包含许多信息。现在,我考虑添加一个新变量,该变量不应从Person
类访问,而我想扩展一个LivingBeing
类(此示例仅用于此线程,因此请不要提出疑问。它的意义)。稍后,它可能不只是一个添加的变量,但是到目前为止,LivingBeing
将具有一个Person
不应该具有的变量。当用户决定这样做时,Person
稍后会变成LivingBeing
。
要使这种继承有效,我将不得不做很多工作,但是最重要的是,我想知道您是否认为它是好的样式还是高效的。为这种简单的继承而更改大量代码是否值得?
另一种选择是,将此特定变量添加到Person
中,直到“需要”以后才使用它。不过,这似乎是一种不好的样式,我认为继承是有原因的,我应该使用它。
编辑:重要的是,只有某些Person
-对象成为LivingBeings
,它们才能共存。因此,区分Person
和LivingBeing
对象会比较容易,而不是总是拥有Person
。
答案 0 :(得分:3)
通常来说,对于这种问题并没有真正的答案。
如果您只是在构建自己的应用程序并且它专注于生物,那么我个人认为为非生物设置额外的类是一种浪费……除非有很好的商业案例。如果过度使用或使用不当,继承会很快变得混乱。
如果您要构建一个灵活的,可重用的库来处理各种未知情况,则您应在应用程序设计中更加严格,因为您可以做出更少的假设。
在后一种情况下,是的;开始将额外的变量添加到类(仅在某些情况下使用)是不好的设计。那会污染您的班级层次结构。
在解决这类设计问题时,您应该考虑很多继承的替代方法:
杂类-许多语言可以让您根据需要将特征混合到其他类中。严格来说,这不是Java内置的,但是在Java 8中,使用接口进行一些工作是可能的。如果将来需要的话,这将使您拥有额外的特定生活功能。
组成-在组成中,生物阶级将持有人阶级并对其行使职能。通常,这比继承干净。 https://en.wikipedia.org/wiki/Composition_over_inheritance
使属性层次结构仅代表类可以具有的其他功能。然后,您可以将其存储在person类内的某些map / etc中。这样,随着您添加更多属性,类中的更改将受到限制。