Java静态成员变量将在构造函数调用完毕后,才赋值

做题遇到这样一个题:

class Person {
    public String name = "Person";
    public Person() {
        sayName();
    }
    public void sayName() {
        System.out.println(name);
    }
}
class Student extends Person {
    public String name = "Student";
    public void sayName() {
        System.out.println(name);
    }
}
class aaa {
    public static void main(String[] args) {
        new Student();
    }
}

以为会调用自己的sayName,从而输出Student,实际上输出null

首先默认的午餐构造函数会调用父类的无参构造函数;
在父类的无参构造方法中,调用后为成员变量初始化,Personnamenull变为Person,最后调用sayName方法;
由于子类自己已经复写了这个方法,那么就调用子类的自己的这个方法;
但是此时子类还没有对自己的name字段进行初始化,故而输出的为null
调用完毕后,子类的name字段初始化为Student

因为调用是从子类的构造->父类的构造,由父类的构造去调用子类的重写方法,那么调用的时候子类还没来得及对其成员变量name进行初始化并赋予初值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦否

文章对你有用?不妨打赏一毛两毛

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值