更新时间:2020-07-30 15:57:46 来源:极悦 浏览1925次
大家猜猜这个会输出什么呢?静态内部类继承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笔试题,据说这道题没几个人做对”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习