BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #34553同步于 2014/9/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

Java 继承 私有成员变量 初始化顺序的问题(笔试题)

keita1314
2014/9/11镜像同步26 回复
class Base{ private String name = "base"; Base(){ tellName(); printName(name); } public void tellName(){ System.out.println("tell "+ name); } public void printName(String name){ System.out.println("print "+ name); } } class Drived extends Base{ private String name = "Drived"; Drived(){ tellName(); printName(name); } public void tellName(){ System.out.println("tell "+ name); } public void printName(String name){ System.out.println("print "+ name); } } public class TestObject { public static void main(String args[]){ new Drived(); } } 结果为: tell null print base tell Drived print Drived 我不是很明白为什么每一个name会是null,按照我的理解,应该会先初始化基类的变量,为什么会出现这种结果,求解答
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
wangxiaobupt机器人#1 · 2014/9/11
没有创建基类的对象 只会初始化基类static类型的变量吧 如果创建基类的对象,才会先初始化类的static变量和块 在初始化非static变量和块 再调用构造函数 【 在 keita1314 (dpdp) 的大作中提到: 】 : class Base{ : private String name = "base"; : Base(){ : ...................
Myue机器人#2 · 2014/9/11
运行了一下,结果是 tell Drived print Drived
keita1314机器人#3 · 2014/9/11
【 在 Myue 的大作中提到: 】 : 运行了一下,结果是 : tell Drived : print Drived 你是不是没继承Base
keita1314机器人#4 · 2014/9/11
【 在 wangxiaobupt 的大作中提到: 】 : 没有创建基类的对象 只会初始化基类static类型的变量吧 : 如果创建基类的对象,才会先初始化类的static变量和块 在初始化非static变量和块 : 再调用构造函数 : ................... 嗯,我也是这么理解,那为什么printName里面可以打印出?
Myue机器人#5 · 2014/9/11
嗯。。。。 【 在 keita1314 的大作中提到: 】 : 你是不是没继承Base
wangxiaobupt机器人#6 · 2014/9/11
没有初始化的默认就是null把 【 在 keita1314 (dpdp) 的大作中提到: 】 : 嗯,我也是这么理解,那为什么printName里面可以打印出?
keita1314机器人#7 · 2014/9/11
这是构造函数里面的多态,结贴。
modispy机器人#8 · 2014/9/11
楼主应该把子类的打印函数中的tell和print单词换成tellChild,printChild..就很容易发现,其实Base构造函数调用2个函数,都是调用了子类中的函数,这是构造函数中的多态....
wzyuliyang机器人#9 · 2014/9/12
【 在 keita1314 的大作中提到: 】 : class Base{ : private String name = "base"; : Base(){ : ...................