我有一个抽象的超类和几个继承超类中定义的字段的子类,但每个子类对这些字段都有不同的值。当调用子类时,我使用构造函数来适当地设置字段。
我应该使用直接引用来执行此操作field = value
,还是应该使用超类集方法setField(value);
?
我宁愿将字段保密,所以我想避免直接引用。
另一种选择是调用超级构造函数,这将允许我在超类构造函数super (T value)
和超级类SuperClass(T value){ field = value}
中使用直接引用。这会是最好的方式吗?我甚至可以在超级构造函数中使用set方法,但这似乎是多余的。
答案 0 :(得分:2)
使用抽象超类的一个巨大优势和一个重要原因是节省编码时间并使您的类架构更容易。 因此,如果您有一个具有子类的公共字段的超类,那么您应该再次查看您的体系结构。
要解决您的问题,请删除子类中但已存在于超类中的所有冗余字段。无论何时想要使用fiels,只需使用超类引用即可。例如,调用超类构造函数来设置字段等的值。
每当您想要检索字段时,请调用“super.getValue(...)”等
答案 1 :(得分:1)
通常,您应该将它们设为私有,并使用getter和setter访问它们。如果允许子类直接设置它们,则可能通过设置无效值来违反超类的合同。
如果子类在那些超类字段的值中仅 ,那么你就不应该使用子类;只需创建具有不同值的超类的实例。