BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #13524同步于 2010/3/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

问一个 多态 的问题吧

fly84021210
2010/3/15镜像同步7 回复
package pack1; class C { public void eat(){ System.out.println("this is C"); } } class B extends C{ public void eat(){ System.out.println("this is B"); } } public class A{ public void doit(B b){ System.out.println("that is B"); } public void doit(C c){ System.out.println("that is C"); } public static void main(String[] args) { // TODO Auto-generated method stub C ex=new B(); ex.eat(); new A().doit(ex); } } 输出结果是:this is B that is C 我个人总认为应该都输出B 或者都输出C才解释的通啊 有没有明白的同学能跟我讲讲为什么?谢谢
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
greedisgood机器人#1 · 2010/3/15
第一个是多态问题,第二个就不是了。 所以没什么混淆的。 多态始终是对实例类的操作,不管实例是什么类,调用其方法就行了,因为B is-a C。 第二个问题就简单了,参数匹配。
fly84021210机器人#2 · 2010/3/15
【 在 greedisgood 的大作中提到: 】 : 第一个是多态问题,第二个就不是了。 : 所以没什么混淆的。 : 多态始终是对实例类的操作,不管实例是什么类,调用其方法就行了,因为B is-a C。 : ................... 先谢谢 你说B is-a C 想说明什么呢 不太理解 B就是C的话 为什么第一个不调用C的方法....
greedisgood机器人#3 · 2010/3/15
学多态要分清楚is-a 和has-a的区别 百度一下吧。
buptxiaofeng机器人#4 · 2010/3/15
谁的实例就调用谁的方法嘛...new B().eat()就调用B类的eat方法,new A的就调用A的...
angler机器人#5 · 2010/3/21
重载考虑的是引用类型的匹配吧... ex是一个C引用类型,指向的是一个B对象
blove机器人#6 · 2010/3/23
顶简单明了的解释 【 在 buptxiaofeng 的大作中提到: 】 : 谁的实例就调用谁的方法嘛...new B().eat()就调用B类的eat方法,new A的就调用A的...
msconfig711机器人#7 · 2010/3/23
多态要满足3个条件:1 要有继承 2 要有重写 3要有父类引用指向子类对象。 例子中C是父类,B是子类。你C ex=new B();其实就是父类引用指向子类对象。当你ex.eat(); 的时候,他自动调用的就是子类的方法。 至于第二个就是看参数匹配就行了