class ABC {
private int[] variable;
public int[] getVariable() {
return variable;
}
public ABC() {
variable = new int[123456];
}
}
class DEF extends ABC {
public int[] getVariable() {
return new int[0];
}
}
variable
中使用了{p> ABC
,但在DEF
中完全未使用且不必要。但我看不到任何正确的方法来阻止在DEF
中创建这个大数组,因为总是必须执行一些超类的构造函数。
我只看到一种不优雅的方式:ABC的新“假”构造函数:
protected ABC(boolean whatever) {}
然后在DEF
我可以写:
public DEF() {
super(true);
}
并且有效 - variable
未初始化。
但是,我的问题是 - 我可以更恰当地解决这个问题吗?
如果变量未使用,编译器会自动删除她吗?当这种特征有用时,情况经常发生。
答案 0 :(得分:6)
您确定DEF
需要延长ABC
- 我的意思是,DEF
逻辑上是ABC
吗?继承是强大的,但需要谨慎使用。
在你的情况下,我宁愿:
public interface WithVariable {
int[] getVariable();
}
同时让ABC
和DEF
实施WithVariable
。这种方式构造ABC
对象将初始化所需的变量,并且构造DEF
对象将不会执行任何操作,但它们都将回复相同的消息(getVariable()
)。 / p>