只是对如何遵循正确答案感到困惑。
class Cat {
public void isClawedBy(Cat c){
System.out.println("Clawed by a cat");
}
}
class Kitten extends Cat{
public void isClawedBy(Kitten c){
System.out.println("Clawed by a Kit");
}
}
如果调用以下内容
Cat g = new Cat();
Cat s = new Kitten();
Kitten t = new Kitten();
g.isClawedBy(t);
s.isClawedBy(t);
t.isClawedBy(t);
答案是怎样的: 被猫抓了 被猫抓了 被小猫抓了
我很困惑为什么 s.isClawedBy(t) = 被猫抓了。 由于 s 的动态类型是小猫,而 t 也是小猫。 是因为参数不同,所以它不会覆盖它吗?
另一部分我很困惑。//注意参数已被交换。
class Cat {
public void isClawedBy(Kitten c){
System.out.println("Clawed by a cat");
}
}
class Kitten extends Cat{
public void isClawedBy(Cat c){
System.out.println("Clawed by a Kit");
}
}
如果调用以下内容
Cat g = new Cat();
Cat s = new Kitten();
Kitten t = new Kitten();
g.isClawedBy(t);
s.isClawedBy(t);
t.isClawedBy(t);
输出为: 被猫抓了 被猫抓了 被猫抓了
当 t 被调用时它是如何工作的?
最佳答案
关于第二个查询:t.isClawedBy(t)
,给出Clawed by Cat
的输出。
因为 t
是一个 Kitten
并且在方法 t.isClawedBy(t)
中传递的参数也是 Kitten
code> 时,将调用父类(super class) Cat
中的方法,因为它与参数完美匹配。
关于java - 多态性 - 简单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17016367/