来自超类的未使用变量

Krz*_*wek 2 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];
    }
} 
Run Code Online (Sandbox Code Playgroud)

variable用于ABC,但完全未使用和不必要的DEF.但我看不到任何正确的方法来阻止创建这个大数组DEF,因为总是必须执行一些超类的构造函数.我只看到一种不优雅的方式:ABC的新"假"构造函数:

protected ABC(boolean whatever) {}
Run Code Online (Sandbox Code Playgroud)

然后DEF我可以写:

public DEF() {
    super(true);
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理 - variable未初始化.

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

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

man*_*nub 6

你确定DEF需要延长ABC- 我的意思是,这是一个DEF逻辑上的ABC?继承是强大的,但需要谨慎使用.

在你的情况下,我宁愿:

public interface WithVariable {
  int[] getVariable();
}
Run Code Online (Sandbox Code Playgroud)

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