返回信息流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才解释的通啊 有没有明白的同学能跟我讲讲为什么?谢谢
这是一条镜像帖。来源:北邮人论坛 / java / #13524同步于 2010/3/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
问一个 多态 的问题吧
fly84021210
2010/3/15镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
第一个是多态问题,第二个就不是了。
所以没什么混淆的。
多态始终是对实例类的操作,不管实例是什么类,调用其方法就行了,因为B is-a C。
第二个问题就简单了,参数匹配。
【 在 greedisgood 的大作中提到: 】
: 第一个是多态问题,第二个就不是了。
: 所以没什么混淆的。
: 多态始终是对实例类的操作,不管实例是什么类,调用其方法就行了,因为B is-a C。
: ...................
先谢谢
你说B is-a C 想说明什么呢 不太理解 B就是C的话 为什么第一个不调用C的方法....
顶简单明了的解释
【 在 buptxiaofeng 的大作中提到: 】
: 谁的实例就调用谁的方法嘛...new B().eat()就调用B类的eat方法,new A的就调用A的...
多态要满足3个条件:1 要有继承 2 要有重写 3要有父类引用指向子类对象。
例子中C是父类,B是子类。你C ex=new B();其实就是父类引用指向子类对象。当你ex.eat(); 的时候,他自动调用的就是子类的方法。
至于第二个就是看参数匹配就行了