为了账号安全,请及时绑定邮箱和手机立即绑定

多态中,成员变量的特点

多态中,成员变量的特点

慕后森 2019-07-26 15:14:38
class Super{    int i=0;    public Super(String s)    {        i=1;    }    public Super()    {        i+=2;    }}class Demo extends Super {    public Demo(String s)    {        i+=5;    }    public static void main(String[] args)     {        int i=4;        Super d=new Demo("YES");        System.out.println(d.i);    }}打印的结果是7,就是i等于7。但是,我记得一个多态的引用,父类引用指向子类对象用来调用成员变量,那么调用的应该是父类下的 i 呀,为什么这里输出结果是7呢?那么这里调用的是父类的 i 吗?父类的 i 变为了7?
查看完整描述

4 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

子类中的int i = 4;

因为没有传入参数列表所以没有意义

然后子类中的构造函数,并没有super 所以默认super调用为空的构造函数

所以i=0+2+5 = 7


查看完整回答
反对 回复 2019-07-27
?
撒科打诨

TA贡献1934条经验 获得超2个赞

因为子类继承父类,这道题中应该有三个i变量,父类的i、子类的i、子类局部的i,局部的i就不管它了。 主函数中,创建了多态的引用d,d的实质是子类对象,那么在初始化过程中,应该是子类的i在发生变化呀,i=0+2+5=7,是不假,但是多态的引用调用成员变量,不应该是调用父类的吗?这里只是堆内存中子类对象的i在初始化呀。 我觉得调用的结果应该是5呀,因为父类构造函数初始化。但结果是7 始终想不明白。


查看完整回答
反对 回复 2019-07-27
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

父类运行在子类前,所以先算父类,然后才是子类,这是继承的顺序问题

查看完整回答
反对 回复 2019-07-27
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

是的呀,但关键是多态的情况下,利用父类引用去调用成员变量,此时调用的是父类下的成员变量呀,如果父类没有这个成员变量就报错啦。按照这个道理,那么上面的题目中父类的成员变量,变为了7.这是为什么啊?

查看完整回答
反对 回复 2019-07-27
  • 4 回答
  • 0 关注
  • 504 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信