Java 多态

发布于 2022-09-01 18:58:57 字数 685 浏览 23 评论 0

遇到一个java 的多态问题想请教下大神们

class Animal {
    public void sayHi() {
        System.out.println("hi from Animal");
    }

    public void link(Animal a) {
        System.out.println("Link in Animal");
        a.sayHi();
    }
}

class Cat extends Animal {
    public void sayHi() {
        System.out.println("hi from Cat");
    }

    public void link(Cat c) {
        System.out.println("Link from Cat");
        c.sayHi();
    }
}

class Main {
    public static void main(String[] args) {
        Animal a = new Cat();
        Cat c = new Cat();
        a.link(c); // Link from Animal \n hi from cat
        a.sayHi(); // hi from Cat
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

幼儿园老大 2022-09-08 18:58:57

没有啥问题啊,a 是 Animal 类型,所以 a.link 调用的是 Animal.link(Animal a),因为 Animal 有没有定义 link(Cat),所以找类型匹配的就是 link(Animal) 了。

如果 ((Cat) a).link(c) 就会调 link(Cat)

夏夜暖风 2022-09-08 18:58:57

多态以后的上转型对象,即此处的a执行的方法只能是子类cat覆盖过的方法或者是父类animal自己的方法,你执行link(c)调用的是父类的link方法,因为子类没有覆盖这个方法,方法覆盖必须是参数类型也一致,进入animal的link方法之后,由于父类的sayHi方法被子类覆盖过,所以会调用子类的sayHi方法而不是父类的sayHi方法,具体你可以搜搜Java对象的上下转型

方觉久 2022-09-08 18:58:57

有问题,cat类没有继承Animal类!!!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文