gpt4 book ai didi

java - 空指针异常 : Overriding constructor calling method of Base class in Derived class

转载 作者:行者123 更新时间:2023-12-03 03:40:08 24 4
gpt4 key购买 nike

我有这个代码片段:

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();
}
}

执行代码时出现异常:

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)

我无法理解为什么会有 NullPointerException 和异常的 stackTrace 。任何人都可以帮助我理解吗?

您可以查看代码here .

最佳答案

new Derived() 创建一个 Derived 对象,这意味着首先调用其父类(super class)构造函数,然后调用 method - 但你已重写method,因此调用的是该方法的子版本。在该方法中,您调用尚未初始化的 bar.length

结论:在构造函数中调用可重写方法几乎从来都不是一个好主意。

关于java - 空指针异常 : Overriding constructor calling method of Base class in Derived class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15986475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com