java面向对象的一个题目,求解?
答案:3 悬赏:60 手机版
解决时间 2021-11-26 17:11
- 提问者网友:火车头
- 2021-11-25 23:45
java面向对象的一个题目,求解?
最佳答案
- 五星知识达人网友:舍身薄凉客
- 2021-11-26 00:48
这个事加载顺序的问题
在解释之前,你得先明确这么几条概念
1.构造子类时会先构造父类;而构造父类时,其所用的静态成员和非静态属性是父类的,但非静态方法却是子类的
2.加载父类时如果遇到重写的成员,则把重写的类型赋值给当前类型
3.加载非静态成员先递归地加载父类的非静态成员在轮到子类
我解释下你这个例子:
这有点绕,如果还不懂,建议你去查查类加载的顺序。
追问哦,懂了,我看armslave88的答案的时候在想,没刷新看你的,想明白,回头再来看你的
又更理解了,我只知道静态属性加载会在构造之前,老师演示过,那么是否可以看作父类的属性是子类的静态属性,在构造之前就已经初始化了,而子类的构造优先调super();Boo中的b不是Aoo中的b,是否可以看成两个不同的b?
在解释之前,你得先明确这么几条概念
1.构造子类时会先构造父类;而构造父类时,其所用的静态成员和非静态属性是父类的,但非静态方法却是子类的
2.加载父类时如果遇到重写的成员,则把重写的类型赋值给当前类型
3.加载非静态成员先递归地加载父类的非静态成员在轮到子类
我解释下你这个例子:
- 程序入口地址main调用构造器,构造Boo
这时候要加载Boo的构造器,构造子类时会先构造父类(如果子类没显示构造器)。
Aoo调用无参的时候发现里面有个方法,在子类被重写了,调用子类方法。
子类方法,发现用到了父类的属性(子类没重写),这个时候由于还在加载父类,所以子类属性值还在初始化状态。集b=0
所以 a=2,b=0
这有点绕,如果还不懂,建议你去查查类加载的顺序。
追问哦,懂了,我看armslave88的答案的时候在想,没刷新看你的,想明白,回头再来看你的
又更理解了,我只知道静态属性加载会在构造之前,老师演示过,那么是否可以看作父类的属性是子类的静态属性,在构造之前就已经初始化了,而子类的构造优先调super();Boo中的b不是Aoo中的b,是否可以看成两个不同的b?
全部回答
- 1楼网友:夜余生
- 2021-11-26 02:12
你好:
new Boo();//因为Boo继承了Aoo,所以会先调用继承父类的无参构造方法Aoo(),而Aoo()中的test()是调用Boo的test();这时Boo中b还未被赋值(因为是调用父类的构造方法在先),这样说能理解吗?
new Boo();//因为Boo继承了Aoo,所以会先调用继承父类的无参构造方法Aoo(),而Aoo()中的test()是调用Boo的test();这时Boo中b还未被赋值(因为是调用父类的构造方法在先),这样说能理解吗?
- 2楼网友:長槍戰八方
- 2021-11-26 01:14
Boo继承了Aoo,并且重写了test方法,当main方法里面执行new Boo时,去调用Boo方法,如果你学了继承,应该知道有默认的super方法,子类也会继承这个方法的。
因为只是new Boo,并没有创建一个Boo 或Aoo 类型的变量来引用这个 new Boo()的对象,所以
执行打印语句的时候,变量a指向的是父类Aoo中a的值,所以是2;
在Boo类中,声明了变量b,是一个成员变量,jvm第一次创建这个变量的时候,还没有给其赋值;所以默认值就是0,这个b没有去指向父类的变量b,所以打印的结果就是0。
如果把语句换成 Boo boo=new Boo(); boo.test(); 则结果会是2,1 这时b被赋值了1。追问哦,谢谢,似乎有了新的理解,是不是new Boo的时候最先会加载Aoo的属性,也就是a,再进行构造,构造中调Boo的方法,但此时的输出的b是其实Boo的特有属性,不是Aoo中的b,而且还没初始化,就是个运行顺序问题,是吗?..
因为只是new Boo,并没有创建一个Boo 或Aoo 类型的变量来引用这个 new Boo()的对象,所以
执行打印语句的时候,变量a指向的是父类Aoo中a的值,所以是2;
在Boo类中,声明了变量b,是一个成员变量,jvm第一次创建这个变量的时候,还没有给其赋值;所以默认值就是0,这个b没有去指向父类的变量b,所以打印的结果就是0。
如果把语句换成 Boo boo=new Boo(); boo.test(); 则结果会是2,1 这时b被赋值了1。追问哦,谢谢,似乎有了新的理解,是不是new Boo的时候最先会加载Aoo的属性,也就是a,再进行构造,构造中调Boo的方法,但此时的输出的b是其实Boo的特有属性,不是Aoo中的b,而且还没初始化,就是个运行顺序问题,是吗?..
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯