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

时间:2010-04-30 19:34:59

标签: java android 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();
    }
}

在构造函数中实例化对象后,当我尝试使用超类方法在内部类中赋值时,我收到运行时错误。

知道这里有什么?你能否在子类构造函数中调用超类方法?

**编辑**原始问题是关于外部类构造函数中的内部类成员赋值。原来问题是在类的构造函数中调用超类方法。它给了我一个空指针异常。因此,问题已经改变。

3 个答案:

答案 0 :(得分:1)

所以我添加了一个分号,一个空基类和一个主。

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平台。)

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

答案 1 :(得分:0)

尝试制作内部static

public static class Data {

这样它就不依赖于MainApplication实例。

<强>更新

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

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

MainApplication() {
    super();

    data = new Data();

答案 2 :(得分:0)

非静态内部类(如Data类)要求MainApplication实例有效。在构造函数期间,MainApplication未完全形成,因此无法使用。正如rsp所说,使Data静态应该解决这个问题。