请验证我的理解/猜测,为什么以下代码会引发NPE以及究竟发生了什么:
P.S。我知道不建议从构造函数中调用非final或非私有的非静态方法。此外,对于C ++中的虚方法,它在Derived中的重写版本不会像在Java中一样在Base构造函数中调用。
class Base {
String str = "abc";
Base() {
foobar();
}
void foobar() {
System.out.println(str.toUpperCase());
}
}
class Derived extends Base {
String str = "qwe";
Derived() {
foobar();
}
@Override
void foobar() {
System.out.println(str.toLowerCase());
}
}
public class My {
public static void main(String[] args) {
new Derived();
}
}