【发布时间】:2012-03-30 21:13:39
【问题描述】:
class Food{}
class Meat extends Food{}
class Animal{
void feed(Food f){}
}
class Lion extends Animal{
void feed(Meat m){}
}
void foo(Animal a){
Food f = new Food();
a.feed(f);
}
如果我们发送到foo(new Lion()) 会发生什么?
我知道它会出错,但我需要解释一下
【问题讨论】:
-
为什么你认为你会在这里得到一个错误? Lion 的 feed 方法不会覆盖 Animal 的 feed 方法,因此 animal 的 feed 方法会在 foo 中调用。如果您尝试在返回类型中使用子类,而不是在参数列表中使用,则会发生覆盖
-
其实不会报错。 Lion 会吃掉食物,但会调用
Animal中的方法,而不是Lion中更具体但不匹配的方法
标签: java oop inheritance covariance