Netbeans给了我很多关于
的警告构造函数中的可覆盖方法
我已经了解了为什么不建议在构造函数中进行可覆盖的方法调用。但是我目前在构造函数中使用的方法纯粹是类成员的getter。
所以在这种情况下,当覆盖方法纯粹是getter时,将它们放在构造函数中是否可以?在我看来,我没有太多的选择,我需要在构造函数中初始化这些变量。我可以创建一个像CustomInitComponents这样的私有方法,将我的变量设置代码放入其中并从构造函数中调用它......这会被认为是更好的实践吗?
答案 0 :(得分:2)
他们是吸毒者还是二传手?因为在你的问题的最后你写的是“初始化这些变量”,而不是检索它们的值。
在任何情况下,您都可以直接设置和获取它们(derived.x = ...
或... = derived.x
),或者您可以使用超级构造函数来初始化它们,而无需关心调用重写方法。
答案 1 :(得分:2)
不,尤其是getter可能会在构造函数中引起问题,因为它们返回的字段可能尚未初始化。
示例:
abstract class A {
public A() {
System.out.println(getName());
}
public abstract String getName();
}
class B extends A {
private String name;
public B (String n) {
name = n;
}
@Override
public String getName() {
return name;
}
}
在这种情况下,A
的构造函数将首先运行并调用getName()
。但是,由于B
的构造函数尚未执行,因此字段name
仍将为null,因此getter将不会返回正确的值。
除此之外,你为什么要重写吸气剂?