答案:不支持。(准确的说是:在Java中,类只支持单继承,而接口可以实现多继承。)

James Gosling在1995年2月发表了一篇名为”Java概览”的Java白皮书,文章解释了Java不支持多重继承的原因。
Java去除了一些C++中很少用、而且被经常误解而错用的功能,如操作符的重载(operator overloading)(尽管Java仍旧保留方法的重载),多重继承(multiple inheritance),以及广泛的自动强迫同型(extensive automatic coercions)。
没有谁比James Gosling更有资格来谈论这个这个话题了。


一、为什么Java只能单继承?

因为在C++中一个类是可以继承多个类,但这样的机制会使类的结构变得很复杂,所以Java将这一机制通过接口得以改善。
Java中不允许类多继承,只能单继承。单继承使得Java简单,易于管理,不会出现逻辑错误以及多继承自身的缺陷。为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口,从而在另一个更合理的角度来实现纯粹的多继承性。因此,通常可以采用实现多个接口的方式间接达到多重继承的目的。


二、Java中类不能实现多继承的原因

如果类之间实现了多继承,会造成程序的紊乱。如果一个子类同时继承了两个父类,而这两个父类拥有相同的属性或方法,子类调用的时候系统不知道该调用哪个父类的属性或方法,会使程序报错。


三、Java与C++的不同

Java不能多继承,只能单继承,但可以实现多个接口,而接口可以多继承。

class A extends B implements C,D,E{}

C++可以实现多继承。


四、为什么接口可以继承多个接口?

抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。而接口中的成员变量均默认为static final类型,即常量,并且接口中定义的都是抽象方法,没有方法体,不能在接口中实现方法。所以,接口继承多个接口,并不会使接口的结构变得很复杂。


五、interface A extends B,C,D可以编译通过,是否违反了Java的单继承特性呢?

Java在编译的时候会检查类是不是多继承,如果出现多继承编译不通过。
(1)接口可以继承多个接口是因为接口里面定义的方法都是未实现的,不会增加复杂性。
(2)接口不是类,而是对类的一组需求的描述。不能在接口中实现方法。接口可以实现多继承而不会增加代码的复杂性。
(3)多继承是发生在执行期间的,而不是在编译期间的,所以可以编译通过,并不违背Java是单继承的。


参考文献
对Java不能多继承,只能单继承,却可以实现多个接口的理解
为什么Java不支持多重继承?


Java学习手册:Java是否支持多继承?为什么?相关推荐

  1. 阿里P8连夜赶出来的5000页Java学习手册及笔记,巴适的很!

    网上的博客知识太碎片化,而看视频学习效率太低,很多人想:如果有完整知识体系 PDF 教程供大家学习,那该多好! 不要慌,成系统的教程和高质量博客,都帮你整理好了! 1. 高质量博客 刚刚整理完毕,专注 ...

  2. Java学习资源 | Java编程最新教学视频大全,推荐

    Java资源合集(视频版) 入门 进阶 高级 样样俱全 学习资源很多,学习方法也很多 适合自己才是最好的 可以试听一下,选择最适合的 加油! 众说周知 B站是一个强大的学习网站 视频 韩顺平零基础30 ...

  3. 深圳Java学习:Java中的原子操作

    深圳Java学习:Java中的原子操作 来到千锋学习Java已经有一段时间了,由当初的懵逼状态逐渐好转,也逐渐养成了写技术学习笔记的习惯,今天总结了一下Java中的原子操作. 1.Java中的原子操作 ...

  4. Java学习:Java就业前景

    Java学习:Java就业前景 在2019年的互联网行业中,中高级Java程序员加速批量加入了求职市场,在薪资波动的同时,初级Java程序员的求职生存空间被严重挤压.而各个大厂的裁员,流入求职市场大量 ...

  5. Java 如何学习?这份5000页Java学习手册值得拥有,适合零基础自学也适合查漏补缺!

    学习技巧 在以前大部分人学习都是先去找本书,先看看,再试,要是不懂了在去网上去查,再在继续啃着书本.但现在向书学习和在网上学习这掌握的效果是不同的,要学会用适合自己的学习方式. 目前的学习要是能看进去 ...

  6. 阿里巴巴 Java 开发手册 Java 开发手册(1.0.1)

    一.编程规约 (一) 命名规约 [强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例: _name / __name / $Object / name_ / nam ...

  7. java学习-01 java历程以及java学习环境配置

    01 Java的历程 前言: ​ 最近在学习Java,之前学习过挺久的Python,现在想来,对很多基础地方都不是很清晰,原因就是没有养成良好的笔记记录习惯,因此,这次学习Java准备从基础开始记录笔 ...

  8. 狂神说Java学习笔记 Java基础

    目录 机器语言 第二代语言(汇编语言) 第三代语言 高级语言 Java特性和优势 JDK(Java Development Kit) JRE(Java Runtime Enviroment) JVM( ...

  9. java学习笔记—java的学习路线

    Java体系涉及到三个方面:J2SE,J2EE,J2ME(KJAVA). J2SE,Java 2 Platform Standard Edition,我们经常说到的JDK,就主要指的这个,它是三者的基 ...

最新文章

  1. 用Unity和C#创建在线多人游戏学习教程
  2. 【转】创建SVN仓库的步骤
  3. QT多国语言加载qm文件不起效果问题总结
  4. solr crud_Spring Data Solr教程:CRUD(差不多)
  5. ask调制流程图_ASK调制解调系统设计与仿真MATLAB课程设计
  6. 系统分析师-论文 (论需求分析方法及应用)
  7. 关于函数YEAR、NOW的使用方法以及求年龄的函数公式
  8. MGR新加节点一直recovering故障解决
  9. Oracle的逻辑读和物理读
  10. python学习——HTMLParser
  11. Cesium结合高德SDK路径规划
  12. 2009北海市东盟杯导游大赛结束,各奖项名花有主-渤锐软件提供了相关的软件支持
  13. iOS - mac环境Jenkins自动化打包并上传蒲公英分发从0到1详细搭建过程,自我的实践记录
  14. [财务][数据化分析][帆软]报表设计-聚合报表设计
  15. FS61C低电压检测IC芯片 series Low Power Voltage Detector
  16. 解决Docker Swarm重装.yml文件后无法创建新Service
  17. html 多个插件,webpack中html-webpack-plugin插件的使用(生成多个html页面,引入不同的js文件)...
  18. 候鸟防关联浏览器原理
  19. dell 笔记本 n卡 deepin驱动
  20. 重学数据结构与算法(02)--将时间复杂度转换成空间复杂度

热门文章

  1. 河南工业大雪c语言题库,河南工业大学C语言题库
  2. Error: Your CLT does not support macOS 11.6问题处理
  3. 勾股定理(计算)C++
  4. oracle用户密码不被锁,Oracle用户密码过期和用户被锁解决方法【转】
  5. 秋天来了,穿衣搭配。简单几件穿出独特气质
  6. All in 企业微信两年,微盛增长启示录:把自己作为方法 | 深谈
  7. 如何给自己各种帐号编一个安全又不会忘记的密码?
  8. html好看的渐变效果,CSS3实现渐变/立体/扁平的漂亮按钮
  9. Unity游戏实战项目-英雄无敌
  10. 织梦dedecms导航指定栏目加上rel=nofollow的方法