永发信息网

java面向对象的一个题目,求解?

答案:3  悬赏:60  手机版
解决时间 2021-11-26 17:11
java面向对象的一个题目,求解?
最佳答案
这个事加载顺序的问题
在解释之前,你得先明确这么几条概念
    1.构造子类时会先构造父类;而构造父类时,其所用的静态成员和非静态属性是父类的,但非静态方法却是子类的
    2.加载父类时如果遇到重写的成员,则把重写的类型赋值给当前类型
    3.加载非静态成员先递归地加载父类的非静态成员在轮到子类
我解释下你这个例子:
    程序入口地址main调用构造器,构造Boo
    这时候要加载Boo的构造器,构造子类时会先构造父类(如果子类没显示构造器)。
    Aoo调用无参的时候发现里面有个方法,在子类被重写了,调用子类方法。
    子类方法,发现用到了父类的属性(子类没重写),这个时候由于还在加载父类,所以子类属性值还在初始化状态。集b=0
    所以 a=2,b=0


这有点绕,如果还不懂,建议你去查查类加载的顺序。
追问哦,懂了,我看armslave88的答案的时候在想,没刷新看你的,想明白,回头再来看你的
又更理解了,我只知道静态属性加载会在构造之前,老师演示过,那么是否可以看作父类的属性是子类的静态属性,在构造之前就已经初始化了,而子类的构造优先调super();Boo中的b不是Aoo中的b,是否可以看成两个不同的b?
全部回答
你好:
new Boo();//因为Boo继承了Aoo,所以会先调用继承父类的无参构造方法Aoo(),而Aoo()中的test()是调用Boo的test();这时Boo中b还未被赋值(因为是调用父类的构造方法在先),这样说能理解吗?
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,而且还没初始化,就是个运行顺序问题,是吗?..
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
purple.is.bird.yellow.the,and摆列一句话
MT6753相当于高通骁龙什么处理器
韩版三星s8有什么坏
QQ飞车里面说几K挂尸是什么意思?
东成9寸电圆锯锯片多少钱
如何进行品牌扩展
一只眼睛视力下降0.03怎么赔偿
物业费71元一个月,单独10天怎么算
拼多多上面卖的28元39元的无限流量卡真的假的
金鸽瓜子是真,还是金鸽瓜籽是真
金凤祥布艺地址好找么,我有些事要过去,
如何让孩子适应小学生活
凯乐琴行(红河州红河县)地址好找么,我有些事
中考是不是在本校考
华溢舞蹈工作室地址在什么地方,想过去办事,
推荐资讯
如果按照画一话的价格来算的话。 玄幻小说自
不懂外语乘坐欧铁怎么知道站名
各位大神防暴开关有三开吗?
毛坦厂中学只有复读班好吗?我是高一新生,去
烘焙过程中如何进行面团松弛?
谁能借个钱……100块就可以……
缘味地址有知道的么?有点事想过去!
靓衣吧地址在什么地方,想过去办事,
喝了烟灰水怎么办
求一个ps2上的女神异闻录4 美版
我的是六轴半挂水泥罐车,毛重55.2吨。按路政
如果知道一个方阵满秩,可以推出什么性质
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?