来自超类的未使用变量

时间:2013-09-13 15:09:26

标签: java constructor initializing

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未初始化。

但是,我的问题是 - 我可以更恰当地解决这个问题吗?

如果变量未使用,编译器会自动删除她吗?当这种特征有用时,情况经常发生。

1 个答案:

答案 0 :(得分:6)

您确定DEF需要延长ABC - 我的意思是,DEF逻辑上是ABC吗?继承是强大的,但需要谨慎使用。

在你的情况下,我宁愿:

public interface WithVariable {
  int[] getVariable();
}

同时让ABCDEF实施WithVariable。这种方式构造ABC对象将初始化所需的变量,并且构造DEF对象将不会执行任何操作,但它们都将回复相同的消息(getVariable())。 / p>