Java 多态
遇到一个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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
没有啥问题啊,a 是 Animal 类型,所以
a.link
调用的是Animal.link(Animal a)
,因为 Animal 有没有定义link(Cat)
,所以找类型匹配的就是link(Animal)
了。如果
((Cat) a).link(c)
就会调link(Cat)
多态以后的上转型对象,即此处的a执行的方法只能是子类cat覆盖过的方法或者是父类animal自己的方法,你执行link(c)调用的是父类的link方法,因为子类没有覆盖这个方法,方法覆盖必须是参数类型也一致,进入animal的link方法之后,由于父类的sayHi方法被子类覆盖过,所以会调用子类的sayHi方法而不是父类的sayHi方法,具体你可以搜搜Java对象的上下转型
有问题,cat类没有继承Animal类!!!