繁体   English   中英

在子类构造函数中调用超类方法的问题

[英]Issue calling superclass method in subclass constructor

我得到一个NullPointerException,它在子类内部类构造方法中调用超类方法。


在应用程序的主类(Application的子类)中,我有一个公共内部类,其中仅包含3个公共字符串对象。 在父类中,我声明该内部类的对象。

public class MainApplication extends Application {
    public class Data {
        public String x;
        public String y;
        public String z;
    }

    private Data data;

    MainApplication() {
        data = new Data()

        data.x = SuperClassMethod();
    }
}

在构造函数中实例化对象之后,当我尝试使用超类方法在内部类中分配值时,会出现运行时错误。

知道这里发生了什么吗? 您不能在子类构造函数中调用超类方法吗?

**编辑**最初的问题是关于外部类构造函数中的内部类成员分配。 事实证明,问题在于在类的构造函数中调用超类方法。 这给了我一个空指针异常。 因此,问题已经改变。

因此,我添加了一个分号,一个空的基类和一个main。

class Application {
}

public class MainApplication extends Application {
    public class Data {
        public String x;
        public String y;
        public String z;
    }

    private Data data;

    MainApplication() {
        data = new Data();

        data.x = "String";
    }

    public static void main(String[] args) {
        new MainApplication();
    }
}

为我工作! (尽管我没有Android平台。)

(分号是复制粘贴错误吗?还是这不是原始代码?)

尝试将您的内部类设为static

public static class Data {

这样,它就不会绑定到MainApplication实例。

更新

从您的评论看来,您的意思是,当调用构造方法下的对象的Application部分时,其Application部分未正确初始化。

由其自己的构造函数构造的对象的调用方法可能导致意外的行为,因为在构造函数完成之前,这些对象不会被一致地初始化。 也就是说,向超级构造函数添加显式调用可能会修复您的依赖性:

MainApplication() {
    super();

    data = new Data();

非静态内部类(例如Data类)要求MainApplication的实例有效。 在构造函数期间,MainApplication的格式不完整,因此无法使用。 正如rsp所说,使Data静态化应该可以解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM