只是对如何遵循答案感到困惑是正确的。
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
,因此将调用超类Cat
中的方法,因为它与参数完美匹配。