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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王峰230321 中级黑马   /  2013-7-24 10:13  /  3177 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-24 20:58 编辑

不知道能不能看见这图哈.   .
有个疑问 就是 .  这个 题中.  f.show  不是应该调用的 父类的show吗? . 因为是父类的f. . 不是应该调用父类里的方法吗. ?..  还是说.  当有共有方法的时候 会覆盖 ?   



如果会覆盖 . 那为什么 第二个图打印的还是 父类的unm

QQ图片20130724101138.jpg (32.38 KB, 下载次数: 0)

QQ图片20130724101138.jpg

QQ图片20130724105457.jpg (29.64 KB, 下载次数: 0)

QQ图片20130724105457.jpg

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

9 个回复

倒序浏览
多态,父类引用指向子类对象。调用的是子类覆盖的方法,看看多态就明白了

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3 赞一个!

查看全部评分

回复 使用道具 举报
继承有3个特点:1.父类有的,子类也有。2.父类没有的,子类可以添加。3.父类有的,子类可以改变。当子类重写了父类的方法,在判断到底会执行哪个方法时,依据是创建的是什么类型的对象,就调用什么类型的方法。当创建的是父类型的对象,便是执行父类型的方法,创建的是子类型的对象,便会执行子类型的方法。在这里是父类型的引用指向了子类型的对象,根据前面的原则,会调用子类型的show方法。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
这是有关多态的知识,Fu f = newDemo();这句创建的是父类类型的子类对象,即父类引用子类对象,这样父类中的同名方法,将会会子类中的方法覆盖,再调用时就会自动调用子类的同名方法。建议回去仔细看看继承和多态,就会明白了。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
继承时子类和父类有相同方法时,子类会覆盖父类方法
子类在引用函数时都先从自己类中调用。 当子类没有次方法时才会调用父类的方法。

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3 赞一个!

查看全部评分

回复 使用道具 举报
关于你的第一个问题楼上的都说的很详细了,父类引用指向子类对象。调用的是子类覆盖的方法。但是你的第二个问题跟第一个有点不同。
因为第一个是调用方法,第二个调用的不是方法,而是变量num,这时候先去父类找num。老师在讲课的时候,这点也有提到,看的时候细心点就能发现。
在多态中,如果子父类中有同名非私有成员变量,访问时要看左边(即引用型变量的类型)来确定调用哪个成员变量。成员变量和静态函数编译运行都看左边;成员函数编译看左边,运行看右边。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
Joesph 中级黑马 2013-7-24 11:15:19
7#
Fu f = new demo();这是用到了多态吧,类型提升 父类的引用指向了自己的子类对象,f.show('B')调用的是子类的show方法
f.show('B')&&(i<2),show()函数在子类里重写了,所以返回的是false,既然条件是false那for循环就不会继续执行了,也就没有后面的D和C了

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
多态问题 ~~
父类调用子类对象
自己分析下
这也是自身学习的方法
回复 使用道具 举报
创建的是什么类型的对象,就调用什么类型的方法。当创建的是父类型的对象,便是执行父类型的方法,创建的是子类型的对象,便会执行子类型的方法。
回复 使用道具 举报
1.Fu f = new Demo();父类引用指向子类对象,加载时,先加载父类对象,再加载子类的其它项,所以子类对象创建后相当于在内存中隐藏了一个父类的引用(super)对象.f指向的是隐藏的父类对象,但是子类中又复写了show方法,相当于把隐藏的父类方法替换掉了,所以调用的是复写的方法。
2.Fu f = new Zi();f指向的还是隐藏的super对象,但是,方法可以复写,属性是不能被复写的,所以,子类对象中隐藏super对象的属性与子类的其它属性是没有改变的,虽然都是变量num,f.num指的是隐藏的num,所以结果是4

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马