NullPointerException:覆盖Derived类中的Base类的构造函数调用方法

Moh*_*sal 2 java nullpointerexception

我有这段代码:

class Base {
    public Base() {
        method();
    }

    void method() {
        System.out.println("In Base");
    }
}

class Derived extends Base {
    private String bar;

    public Derived() {
        bar="bar";
    }

    public void method() {
        System.out.println(bar.length());
    }

    public static void main(String[] args) {
        Base base=new Derived();
        base.method();
    }
}
Run Code Online (Sandbox Code Playgroud)

在执行代码时,我得到了一个异常:

Exception in thread "main" java.lang.NullPointerException
    at Derived.method(Main.java:22)
    at Base.<init>(Main.java:5)
    at Derived.<init>(Main.java:17)
    at Derived.main(Main.java:27)
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么会有NullPointerException和stackTrace异常的.有人可以帮我理解吗?

你可以在这里查看代码.

ass*_*ias 6

new Derived()创建一个Derived对象,这意味着首先调用它的超类构造函数,然后调用它method- 但是你已经覆盖了method它,因此它是被调用的那个方法的子版本.在该方法中,您调用bar.length尚未初始化的方法.

结论:在构造函数中调用可覆盖的方法几乎绝不是一个好主意.