Java语言为什么不支持多重继承

Java的三大特性继承、封装、多态,可以说没有继承就没有多态。
当使用父类引用子类的实例变量时,如果调用一个父类的方法,编译器不会知道到底要执行子类还是父类的方法,它只负责检查。当程序运行时,Java虚拟机分配了一块堆内存,而这个父引用则指向这块内存,执行指向所内存的方法区中的内容,这就是多态。
假设Java支持多重继承,Animal有两个子类Cat和Dog,这两个类各自实现了run()方法,同时还被CatDog所继承,未实现run方法(这生的是个怪胎,不能跑),假设执行以下代码:

Animal animal = new CatDog();
animal.run();

根据java虚拟机执行的规则,它会就近找run方法,CatDog()中无run()方法,则去父类找,那么究竟是执行Cat中的run还是Dog中的run,编译器无法确定,索性就不允许多重继承了(编译器:只要我装作没发现问题,那就没有问题…)

Java中是支持实现多个接口的,因为实现接口后,接口中的方法也一定会被实现,这样就不存在向上找方法的情况了。
什么,你问接口中的方法每个都要单独实现,并未起到继承那样节省代码的作用,为甚么还要搞个接口?当然是因为多态啦!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值