java - 父类构造器中调用将要被子类重写的方法,为什么报错?
PHP中文网
PHP中文网 2017-04-17 11:43:08
[Java讨论组]

我给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();
}
}
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(2)
PHPz
Sub s = new Sub();

这个初始化的顺序是Base()-Sub()
也就是说你在初始化Base的时候调用test(),但这个时候name并未被初始化(因为子类Sub还没初始化),所以就报空指针了

PHPz

Java的构造函数是从基类到子类一个一个顺序执行的,另外private String name = "hello";这样的成员变量初值其实也是构造函数的一部分。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号