2
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在 中使用ABC,但在 中完全未使用且不需要DEF。但是我看不到任何适当的方法来防止在 中创建这个大数组DEF,因为总是必须执行一些超类的构造函数。我只看到一种不优雅的方式:ABC 的新“假”构造函数:

protected ABC(boolean whatever) {}

然后DEF我可以写:

public DEF() {
    super(true);
}

它有效 -variable未初始化。

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

也许如果变量未使用,编译器会自动删除她?当这种功能可能有用时,这种情况很常见。

4

1 回答 1

6

你确定DEF需要扩展ABC- 我的意思是,在DEF逻辑上是 aABC吗?继承很强大,但需要谨慎使用。

在你的情况下,我宁愿有:

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

并兼有ABCDEF实施WithVariable。这样构造一个ABC对象将初始化所需的变量,构造一个DEF对象不会做任何事情,但它们都会回复相同的消息(getVariable())。

于 2013-09-13T15:15:14.460 回答