java可以多继承吗_Java为什么不使用多继承?

相信如果是第一次学习接口的同学可能会产生一个疑惑?什么疑惑呢?

首先接口长成这样

interface Exampleinterface

{

void something();

}

interface Exampleinterace1

{

void something1();

}

我们可以通过implements关键字,实现多个接口继承。

class Ex implements Exampleterface,Exampleinterface1

{...}

那想必抽象类大家都学过了,表示一种更高层次的类,往往充当占位的角色,功能与接口十分相似,只是声明和继承的关键子不一样。那为什么不直接继承多个抽象类,像这样

abstract class Ex0

{

public abstract void something();

}

abstract class Ex1

{

abstract void something();

}

class Test extends Ex0,Ex1//会报错

{

public void something() {

}

}

这是因为Java不支持一个类多个继承类。为什么Java不支持多继承呢?

好,既然Java不支持我们先看看那些语言支持吧,这里我们就以Python,和C++来说明,多继承如何工作的。

首先需要了解一下多继承的二义性问题二义性问题

二义性问题:当b1,b2都继承A时,假设A类有个f()方法都被b1,b2重写。此时c在同时继承b1,b2当调用f()方法时,就无法确定调用那个方法。

首先Python多继承也会遇到二义性的问题,这里Python用的及时MRO机制,最早MRO利用的深度优先算法,但是有缺陷,只能对一个类进行重写,后来改成c3算法,主要利用的是广度优先算法,就很好确立了方法调用的顺序。

而C++的多继承则是同过虚继承来解决这个问题。二者在面对多继承的二义性问题时都十分复杂难以理解,笔者看了半天也就明白个大概,就不仔细说了。所以Java语言的设计者在面对 这个问题的时候,坚持着Java是简单易学的特性,放弃了多继承这个特性,转而利用多继承接口来实现多继承的类似功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值