A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  对于面向对象的多态,父类 变量名=new 子类();
  变量名.属性a,为什么输出的是父类中的变量a而不是子类中的变量a

11 个回复

倒序浏览
冯家老师的视频讲的很清楚,可以参考.

点评

嗯嗯,感谢分享,我去看看  发表于 2016-9-8 23:13
回复 使用道具 举报
子类对象当中不全是子类的属性,有一块区域存放着父类的属性,而变量名.属性调用的就是父类这部分,day09多态那部分笔记有

点评

哦,那就是说子类对象在堆中开辟的内存,里面是包含着父类的  发表于 2016-9-8 23:31
回复 使用道具 举报
这个看课件吧
回复 使用道具 举报
在多态中,当父类引用指向子类对象时,分三种情况,如果是调用的成员变量,则编译和运行时都看左边,如果调用的是非静态方法,编译看左也就是看父类,运行时看右边也就是子类(因为子类重写了父类方法),当调用的是静态方法时,编译和运行都看左边

点评

这个我记一下,多谢分享  发表于 2016-9-8 23:33
回复 使用道具 举报
这个涉及的是内存上知识,在堆内存中创建子类对象时,其中会分配一个内存空间给父类的变量,由于是父类引用指向子类对象,实际在栈内存中父类的引用指向的是堆内存中父类的那块
回复 使用道具 举报
既然是多态前提条件就是继承关系,继承父类的一切可以继承的属性 输出的自然是父类中的a
回复 使用道具 举报
既然是多态前提条件就是继承关系,继承父类的一切可以继承的属性和方法,加以引用
回复 使用道具 举报
顶顶顶~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马