【发布时间】:2014-09-17 21:38:21
【问题描述】:
我有一个抽象超类和几个继承超类中定义的字段的子类,但每个子类对这些字段有不同的值。当调用子类时,我使用构造函数来适当地设置字段。
我应该使用直接引用来做到这一点field = value,还是应该使用超类设置方法setField(value);?
我宁愿将字段保密,所以我想避免直接引用。
另一种选择是调用超级构造函数,这将允许我在超级类构造函数super (T value) 和超级类SuperClass(T value){ field = value} 中使用直接引用。这会是最好的方法吗?我什至可以在超级构造函数中使用 set 方法,但这似乎是多余的。
【问题讨论】:
-
您可能应该重新评估您的类层次结构,看看是否有必要。继承给你带来的问题可能比它解决的要多。子类不应该有很多与超类具有不同值的相同字段。如果你不能使用超抽象类中的任何字段值,你为什么要在那里定义它们?
-
因为它们对所有子类都是通用的。为什么要多次声明它们?我没有在子类中声明它们。
-
为什么不在抽象超类中定义字段,但实际上不将它们设置为任何特定值?您应该能够设置抽象超类,如果子类没有为任何字段设置值,则会引发异常。
-
这就是我正在做的。除了通过子类之外,我从未说过我正在初始化字段。问题是,由于它们是私有字段,它们必须通过超级构造函数访问,或者通过调用公共超级方法。我只是想知道哪种方式最好。
标签: java superclass