为了账号安全,请及时绑定邮箱和手机立即绑定

急求!!!!java 多态多个继承的疑惑?万分感谢

急求!!!!java 多态多个继承的疑惑?万分感谢

MMMHUHU 2019-07-28 12:47:03
自己在学习多态的时候有看到这么一个例子,但是不是很理解,如下://Test.javapublicclassTest{publicstaticvoidmain(String[]args){Ac=newC();c.add();//"C"}}classA{publicvoidadd(){System.out.println("A");}}classBextendsA{publicvoidadd(){System.out.println("B");}}classCextendsB{publicvoidadd(){System.out.println("C");}}有三个类,关系为C继承B,B继承C,同时三个类里面都有一个add()方法,此时如果创建Ac=newC();以后,再调用c.add();输出是"C",说明是调用了C里面的add()方法但是如果我改成这样:publicclassTest{publicstaticvoidmain(String[]args){Ac=newC();c.add();//"B"}}classA{publicvoidadd(){System.out.println("A");}}classBextendsA{publicvoidadd(){System.out.println("B");}}classCextendsB{//publicvoidadd(){//System.out.println("C");//}}即C里面没有add()方法了,为什么输出是"B",而不是"A"?我自己的理解是:我在创建c这个对象的时候是使用的A类似,那么如果C里面没有add()方法,就无法重写,应该直接调用A里面的add()方法,但是实际情况好像并非如此,因此比较迷惑.希望能有前辈可以指点一二,不胜感激.
查看完整描述

2 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

newC()创建的就是一个C的对象,跟你把它赋值给什么变量没有关系,不管是A还是B还是C还是Object。
调用c.add就是调用c对象的add方法,与c被声明成什么类型无关。C没有重写add方法,则它的add方法继承自它的直接父类B
                            
查看完整回答
反对 回复 2019-07-28
?
皈依舞

TA贡献1851条经验 获得超3个赞

首先Java原则上没有多继承,只有类与类之间的单继承,因此ClassC继承ClassB只需要关注B的方法有没有被C重写,如果没有则完全继承B的所有方法实现。同理ClassB和ClassA的关系也是如此。
如果想要输出A,那上述的情况是B也不重写add()方法,完全继承A的add()方法
                            
查看完整回答
反对 回复 2019-07-28
  • 2 回答
  • 0 关注
  • 193 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号