Java 基于子类定义超类实例字段的最佳实践
我有一个抽象的超类和几个继承超类中定义的字段的子类,但是每个子类对这些字段都有不同的值。调用子类时,我使用构造函数适当地设置字段 我应该使用直接引用来执行此操作吗Java 基于子类定义超类实例字段的最佳实践,java,superclass,Java,Superclass,我有一个抽象的超类和几个继承超类中定义的字段的子类,但是每个子类对这些字段都有不同的值。调用子类时,我使用构造函数适当地设置字段 我应该使用直接引用来执行此操作吗field=value,还是应该使用超类集合方法setField(value) 我宁愿将字段保密,因此我希望避免直接引用 另一种选择是调用超级构造函数,这将允许我在超级类构造函数super(T value)和超级类SuperClass(T value){field=value}中使用直接引用。这是最好的方式吗?我甚至可以在超级构造函数中
field=value
,还是应该使用超类集合方法setField(value)代码>
我宁愿将字段保密,因此我希望避免直接引用
另一种选择是调用超级构造函数,这将允许我在超级类构造函数super(T value)
和超级类SuperClass(T value){field=value}
中使用直接引用。这是最好的方式吗?我甚至可以在超级构造函数中使用set方法,但这似乎是多余的。一般来说,应该将它们设置为私有,并使用getter和setter访问它们。如果允许子类直接设置它们,它们可能会通过设置无效值违反超类的约定
如果子类只在那些超类字段的值上有所不同,那么就不应该使用子类;只需创建具有不同值的超类实例。通常,您应该将它们设置为私有,并使用getter和setter访问它们。如果允许子类直接设置它们,它们可能会通过设置无效值违反超类的约定
如果子类只在那些超类字段的值上有所不同,那么就不应该使用子类;只需创建具有不同值的超类实例。通常,您应该将它们设置为私有,并使用getter和setter访问它们。如果允许子类直接设置它们,它们可能会通过设置无效值违反超类的约定
如果子类只在那些超类字段的值上有所不同,那么就不应该使用子类;只需创建具有不同值的超类实例。通常,您应该将它们设置为私有,并使用getter和setter访问它们。如果允许子类直接设置它们,它们可能会通过设置无效值违反超类的约定
如果子类只在那些超类字段的值上有所不同,那么就不应该使用子类;只需创建具有不同值的超类实例。使用抽象超类的一个巨大优势和一个重要原因是节省编码时间,并使您的类体系结构更加简单。
因此,如果您有一个具有子类的公共字段的超类,那么您应该再看看您的体系结构
要解决您的问题,请删除子类中已存在但超类中已存在的任何冗余字段。无论何时,只要使用fiels,就可以使用超类引用。例如,调用超类构造函数来设置字段等的值
每当您想要检索字段时,请调用“super.getValue(…)”等使用抽象超类的一大优点和一个重要原因是节省编码时间,并使您的类体系结构变得更加简单。
因此,如果您有一个具有子类的公共字段的超类,那么您应该再看看您的体系结构
要解决您的问题,请删除子类中已存在但超类中已存在的任何冗余字段。无论何时,只要使用fiels,就可以使用超类引用。例如,调用超类构造函数来设置字段等的值
每当您想要检索字段时,请调用“super.getValue(…)”等使用抽象超类的一大优点和一个重要原因是节省编码时间,并使您的类体系结构变得更加简单。
因此,如果您有一个具有子类的公共字段的超类,那么您应该再看看您的体系结构
要解决您的问题,请删除子类中已存在但超类中已存在的任何冗余字段。无论何时,只要使用fiels,就可以使用超类引用。例如,调用超类构造函数来设置字段等的值
每当您想要检索字段时,请调用“super.getValue(…)”等使用抽象超类的一大优点和一个重要原因是节省编码时间,并使您的类体系结构变得更加简单。
因此,如果您有一个具有子类的公共字段的超类,那么您应该再看看您的体系结构
要解决您的问题,请删除子类中已存在但超类中已存在的任何冗余字段。无论何时,只要使用fiels,就可以使用超类引用。例如,调用超类构造函数来设置字段等的值
每当您想要检索字段时,调用“super.getValue(…)”等您可能应该重新评估您的类层次结构,看看是否有必要。继承给您带来的问题可能比它解决的问题还多。子类不应该有很多相同的字段,这些字段的值与超类不同。如果您不能在超级抽象类中使用任何字段值,那么首先为什么要在那里定义它们?因为它们对于所有子类都是通用的。为什么要多次申报?我不是在子类中声明它们。为什么不在抽象超类中定义字段,而不实际将它们设置为任何特定的值呢?您应该能够以这样的方式设置抽象超类:如果子类没有为任何字段设置值,就会抛出异常。这就是我正在做的。我从来没有说过我正在初始化字段,除了