Dav*_*ton 5 java variables abstract-class
我正在编写一个抽象类,我有一个应该由子类定义的变量(在这种情况下,它是一个在超类中使用的int).我无法决定是否protected使用默认值定义变量,并让子类在构造函数中或通过setter方法更改值.或者在父类中定义一个抽象方法,以便所有子类必须实现它并返回它们想要使用的值(然后使用抽象方法访问超类中的方法).任何人都可以告诉我,为什么一种方式优先于另一种方式有任何重要原因?
抽象方法:
public abstract int getValue();
public int getValue() {
return 5;
}
Run Code Online (Sandbox Code Playgroud)
强迫子类考虑这个值并选择他们想要的值.
没有默认值,因此即使大多数子类只想使用相同的值,他们仍然必须实现该方法.(该方法可以是非抽象的并返回默认值,但是你失去了强迫子类思考值的优势)
受保护的变量:
protected int value;
public SubClassImpl() {
value = 5;
}
Run Code Online (Sandbox Code Playgroud)
可以定义默认值,如果子类不关心,子类可以忽略它.
子类的作者没有意识到变量的存在,因此他们可能会对默认行为感到惊讶.
这得看情况...
值是否必须能够在对象的生命周期内更改?如果没有,您可能希望将其作为受保护的构造函数参数,并使其成为基类中的最终私有变量.
可能的子类有理由根据其他可变状态计算变量吗?如果是这样,抽象的吸气剂将是合适的.
否则,我可能会使用私有变量和受保护的setter.我一般不喜欢非私人变量.这可以允许您对基类中值的更改做出反应,例如更改其他计算机字段.为了避免出现默认值,您可以将其与构造函数参数结合使用,以强制初始值,子类可以稍后通过setter进行更改.
| 归档时间: |
|
| 查看次数: |
423 次 |
| 最近记录: |