从抽象 class 中引用实例变量

Referencing instance variables from within abstract class

我有一个摘要 class,它列出了每个子 class 应该实现的内容。大多数方法对每个子 class 都有不同的实现,但有些方法对所有子都是相同的。我希望在摘要 class 中定义相同的方法,这样我就不会将相同的方法粘贴到多个不同的 class 中。但是,当我在抽象的 subclass 的实例上调用该方法时,我收到一个空指针,因为我想,在抽象 class 中实现的方法正在引用抽象的字段,而不是实例的字段.

谁能指出漏洞在哪里?

例如:

abstract class ControlView {
    String[] controls;

    abstract void render();

    void release() {
        for (int i = 0; i <= controls.length; i++) {
            //Release the controls
        }
    }
}



class StartingControls extends ControlView{

    String[] controls;
    Button uiDrawButton;
    Button uiLoadButton;


    StartingControls() {
        this.controls = new String[2];

        uiDrawButton = new Button();
        this.controls[0] = uiDrawButton;

        uiLoadButton = new Button();
        this.controls[1] = uiLoadButton;
    }


    public void render() {
        //Unique Render implementation
    
    } 
}

当我打电话时

instanceOfStartingControls.release();

我显然想遍历构造 instanceOfStartingControls 的控件字段时放入的两个字符串。我不想迭代显然存在于抽象中的未初始化数组。

是访问修饰符或静态方法的某种组合使它无法正常工作,还是我错过了一些关于抽象 classes 的关键知识?这感觉像是一个基本问题,但我很难用语言表达,所以我对搜索的任何结果都不满意。

有两个名为 controls 的数组。派生 class 中的那个遮盖了基础 class 中的那个,因此基础实例永远不会设置 non-null.

删除派生的声明class。

此问题与基础 abstract 无关。如果您在派生 class 中使用与在基础 class 中使用的字段名称相同的字段名称,基础实例将被隐藏。