微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从抽象类中引用实例变量

如何解决从抽象类中引用实例变量

我有一个抽象类,列出了每个子类应实现的内容。对于每个子类,大多数方法将具有不同的实现,但是对于所有子类,某些方法将是相同的。我希望将在抽象类中定义的方法相同,以便不会将同一方法粘贴到几个不同的类中。但是,当我在抽象的子类的实例上调用方法时,会收到一个空指针,因为我想,在抽象类中实现的方法将引用抽象的字段,而不是实例的字段。

有人可以指出缺陷在哪里吗?

例如:

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控件字段的两个字符串。我不想要遍历显然存在于抽象中的未初始化数组。

是访问修饰符或静态方法的某种组合使它无法按其应有的方式工作,还是我在抽象类上缺少了一些关键的知识?这似乎是一个基本问题,但是我很难说出来,所以我对搜索的任何结果都不满意。

解决方法

有两个名为controls的数组。派生类中的一个使基类中的一个模糊,因此基实例永远不会设置为非null。

从派生类中删除声明。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。