猿问

Java 多态

遇到一个java的多态问题想请教下大神们
classAnimal{
publicvoidsayHi(){
System.out.println("hifromAnimal");
}
publicvoidlink(Animala){
System.out.println("LinkinAnimal");
a.sayHi();
}
}
classCatextendsAnimal{
publicvoidsayHi(){
System.out.println("hifromCat");
}
publicvoidlink(Catc){
System.out.println("LinkfromCat");
c.sayHi();
}
}
classMain{
publicstaticvoidmain(String[]args){
Animala=newCat();
Catc=newCat();
a.link(c);//LinkfromAnimal\nhifromcat
a.sayHi();//hifromCat
}
}
慕尼黑的夜晚无繁华
浏览 395回答 2
2回答

神不在的星期二

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

相关分类

JavaScript
我要回答