大家猜猜这个会输出什么呢?静态内部类继承Base类,属性和父类的一样,重写了父类的一个方法,然后在main函数里面调子类的构造函数,其实仔细思考一下大概就知道输出的是什么了~
输出的答案是null
这题的流程是在初始化Sub对象前,首先JAVA虚拟机就在堆区开辟内存并将子类Sub中的baseName和父类Base中的baseName均赋为null。Base b=new Sub()的时候,会先调用父类的无参构造函数,因为子类和父类属性名一样的话,会将父类的属性隐藏。调用了父类的构造函数,父类的构造函数中调用了callName方法,此时父类中的baseName的值为base,可是子类重写了callName方法,且调用父类Base中的callName是在子类Sub中调用的,因此当前的this指向的是子类,也就是说是实现子类的callName方法。可见,在baseName=“sub”执行前(子类赋值语句),子类的callName()已经执行,所以子类的baseName为默认值状态null。
以上就是动力节点java培训机构的小编针对“携程java笔试题,据说这道题没几个人做对”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习