首页 > 父类构造器中调用将要被子类重写的方法,为什么报错?

父类构造器中调用将要被子类重写的方法,为什么报错?

我给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还没初始化),所以就报空指针了

【热门文章】
【热门文章】