遇到一个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\nhifromcata.sayHi();//hifromCat}}
2 回答
神不在的星期二
TA贡献1963条经验 获得超6个赞
多态以后的上转型对象,即此处的a执行的方法只能是子类cat覆盖过的方法或者是父类animal自己的方法,你执行link(c)调用的是父类的link方法,因为子类没有覆盖这个方法,方法覆盖必须是参数类型也一致,进入animal的link方法之后,由于父类的sayHi方法被子类覆盖过,所以会调用子类的sayHi方法而不是父类的sayHi方法,具体你可以搜搜Java对象的上下转型
添加回答
举报
0/150
提交
取消