java - 多态性 - 简单

标签 java dynamic polymorphism dispatch

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

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/

相关文章:

Java 媒体框架和 Windows 8.1

java - 如何在 MainActivity 运行时显示 SplashScreen

ajax - HighCharts - 如何创建导出所有内容的动态图表

c# - 使用动态类型从匿名对象中获取值是不好的做法吗?

php - 在 Yii2 中以多态方式从数据库中查找模型

c++ - 是否可以防止成员函数被重新定义?

java - Grails 的 AOP

java - java中使用weibull分布的随机数生成

jquery - 使用 JQ 或 CSS 添加每个 X 元素的 div

java - 在一个具体类中定义所有抽象方法