我给name赋值了, 为什么还会报空指针异常?
class Base{
public Base()
{
test();
}
public void test()
{
System.out.println("将要被子类重写的方法");
}
}
public class Sub extends Base{
private String name = "hello";
public void test() //②号test方法
{
System.out.println("子类重写父类的方法," + "其name字符串长度" + name.length());
}
public static void main(String[] args)
{
Sub s = new Sub();
}
}
Java的构造函数是从基类到子类一个一个顺序执行的,另外private String name = "hello";
这样的成员变量初值其实也是构造函数的一部分。
Sub s = new Sub();
这个初始化的顺序是Base()-Sub()
也就是说你在初始化Base的时候调用test(),但这个时候name并未被初始化(因为子类Sub还没初始化),所以就报空指针了