黑马程序员技术交流社区

标题: 多态问题解析 [打印本页]

作者: lizhi    时间: 2015-5-24 10:24
标题: 多态问题解析
Animal a = new Cat(); 像这样子的语句,Cat是Animal的子类,a不能调用cat类里面特有的方法和属性,a只能看到cat从Animal继承过去的方法和属性,a在编译的时候,只能调用Animal里面的方法和属性,而不能调用Cat的方法和属性。  要注意的是,这样写Animal a = new Cat(); 后面的Cat必须继承Animal类,为了出现多态,Cat类中必须重写Animal的方法。所谓重写,就是要有和父类Animal中有一模一样的方法。  编译的时候,a调用的是自己的方法,我们可以预测结果,但是运行的时候,却出现了不同的结果,因为他这个时候调用的是Cat的方法,这就是多态。  多态呢,很简单,面向对象吗,动物是总类,他又自己特定方法,继承与他的其他动物也有这个特定方法,但是他们方法结果不一样的。  多态,也仅仅是指类的方法,与属性没有任何关系。  Animal a = new Cat(); a这个引用变量指向了Cat这个对象。
作者: qq496099229    时间: 2015-5-24 10:36
不错,赞一个
作者: 别想太多    时间: 2015-5-24 10:38
啊 应该可以调用cat的方法吧,cat 重写了 animal的方法,创建的对象a是cat的对象吧 , 我有点糊涂了,不知道说的对不对。!
作者: lizhi    时间: 2015-5-24 11:42
别想太多 发表于 2015-5-24 10:38
啊 应该可以调用cat的方法吧,cat 重写了 animal的方法,创建的对象a是cat的对象吧 , 我有点糊涂了,不知 ...

a是父类的引用指向子类对象,编译时看父类中有没有该调用的方法,如果有编译通过,没有就会报错,子类继承了父类肯定能调用父类中没有被私有的方法呀
作者: 别想太多    时间: 2015-5-24 11:44
lizhi 发表于 2015-5-24 11:42
a是父类的引用指向子类对象,编译时看父类中有没有该调用的方法,如果有编译通过,没有就会报错,子类继 ...

a 不可以调用cat的私有的方法吗?
等下我去试试 ,现在有点忙!

作者: 王小乖    时间: 2015-5-24 12:34
我觉的说白了就是子类继承父类的时候,在调用方法或属性的时候,子类如果存在被调用的属性或者方法,那么就调用子类自己的属性或者方法,若是不存在,那么就调用父类的。也就是说,如果调用的是子类重写了父类的方法时,就运行子类的方法,如果子类没有重写,那么就调用父类的该方法,这是动态绑定问题。个人愚见,仅供参考,请多多指教!
作者: lizhi    时间: 2015-5-24 13:12
王小乖 发表于 2015-5-24 12:34
我觉的说白了就是子类继承父类的时候,在调用方法或属性的时候,子类如果存在被调用的属性或者方法,那么就 ...

是这样的,多注意些理解性的东西跟基础知识就会都明白的
作者: lizhi    时间: 2015-5-24 13:13
zhangkai986745 发表于 2015-5-24 12:23
只要掌握父类调用子类的属性和方法就可以了

说的对,是这样的
作者: lizhi    时间: 2015-5-24 13:14
qq496099229 发表于 2015-5-24 10:36
不错,赞一个

嘿嘿,一起努力
作者: JavaStudy770    时间: 2015-5-24 14:19
嗯,多态吧就是事物的多种表现形态。在Java里就是指对象在不同时刻表现出来的不同状态。你这里总结的仅仅是继承中对象所表现出来的多态性,其实方法的重载也是多态的一种体现
作者: lizhi    时间: 2015-5-24 18:40
JavaStudy770 发表于 2015-5-24 14:19
嗯,多态吧就是事物的多种表现形态。在Java里就是指对象在不同时刻表现出来的不同状态。你这里总结的仅仅是 ...

恩,看来你理解的很深刻
作者: L番茄X    时间: 2015-5-24 22:26
我会认真看下去.
作者: 代码搬运1号    时间: 2015-5-24 23:14
受教了~!
作者: 虎鹏    时间: 2015-5-24 23:17
不错!加油啊

作者: 宸宸    时间: 2015-5-24 23:55
~看见你黑马币我瞬间亮了
作者: 凉仁日记    时间: 2015-5-25 00:19
可以调用cat的方法吧,cat 重写了 animal的方法,创建的对象a是cat的对象吧
作者: 黯然残影    时间: 2015-5-25 01:26
分析的不错,学习学习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2