只是对如何遵循答案感到困惑是正确的。

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的输出。

由于tKitten,并且在方法t.isClawedBy(t)中传递的参数也是Kitten,因此将调用超类Cat中的方法,因为它与参数完美匹配。

08-26 02:08