我知道您可以从构造函数中调用一个方法,但是如果该方法可以被覆盖,它可能会在以后导致问题。以下代码只是我为演示我的问题而编写的示例:
假设我有以下子类:
private boolean isActive;
public ChargeGun(String gameObjectID, String gameObjectName, String desc, int numberofshots, int damage, boolean isActive) {
super(gameObjectID, gameObjectName, desc, numberofshots, damage);
setAttributes(isActive);
}
public ChargeGun(String gameObjectID, String gameObjectName, int numberofshots, int damage, boolean isActive) {
super(gameObjectID, gameObjectName, numberofshots, damage);
setAttributes(isActive);
}
private final void setAttributes(boolean isActive)
{
this.isActive = isActive;
}
boolean isActive
特定于 ChargeGun
而不是任何其他枪支。假设我的子类中有两个构造函数,而不是键入 isActive = true
两次,我可以调用一个 private final 方法
来完成它吗?原因是,如果我的 ChargeGun 属性增长,那么我将不得不在两个构造函数中添加属性。如果我使用 private final 方法来做,一切都设置在一个地方。这是不好的做法吗?
我无法链接 ChargeGun 构造函数,因为它们都调用父类(super class)构造函数。
最佳答案
private
方法不能被覆盖,您也不需要将其标记为final
(这也意味着它不能被覆盖)。 final
或 private
之一就足够了。但是,该方法需要稍微修改一下。喜欢,
private void setAttributes(boolean isActive)
{
this.isActive = isActive;
}
您的版本总是将其设置为true
。如果那是故意的,我会完全删除 setter,然后做类似的事情
private final boolean isActive = true;
这是不可变字段的声明和初始化。
关于java - 可以从构造函数调用 Private Final 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36753626/