2019独角兽企业重金招聘Python工程师标准>>>

多继承虽然能使子类同时拥有多个父类的特征,但是其缺点也是很显著的,主要有两方面:
(1)如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该变量时将产生歧义,无法判断应该使用哪个父类的变量。例如:类ClassA:public class ClassA {protected int varSame = 0;
}类ClassB:public class ClassB {protected int varSame = 1;
}子类ClassC:(假设允许类与类之间多继承)public class ClassC extends ClassA, ClassB {public void printOut() {System.out.println(super.varSame);}public static void main(String[] args) {ClassC classC = new ClassC();classC.printOut();}}上面程序的运行结果会是什么呢?输出0还是1?
(2)如果在一个子类继承的多个父类中拥有相同方法,子类中有没有覆盖该方法,那么调用该方法时将产生歧义,无法判断应该调用哪个父类的方法。例如:类ClassA:public class ClassA {public void printOut() {System.out.println(0);}}类ClassB:public class ClassB {public void printOut() {System.out.println(1);}}子类ClassC:(假设允许类与类之间多继承)public class ClassC extends ClassA, ClassB {public static void main(String[] args) {ClassA classA = new ClassC();classA.printOut();      // -------------------------  A行ClassB classB = new ClassC();classB.printOut();      // -------------------------  B行ClassC classC = new ClassC();classC.printOut();       //-------------------------  C行}}上面程序的运行结果会是什么呢?A、B、C三行的输出是0还是1?
正因为有以上的致命缺点,所以java中禁止一个类继承多个父类;在接口中不能有实例变量,只能有静态的常量,不能有具体的方法(包含方法体),只能有抽象方法,因此也就摒弃了多继承的缺点。
对于一个类实现多个接口的情况,因为接口只有抽象方法,具体方法只能由实现接口的类实现,在调用的时候始终只会调用实现类的方法(不存在歧义),因此不存在 多继承的第二个缺点;而又因为接口只有静态的常量,但是由于静态变量是在编译期决定调用关系的,即使存在一定的冲突也会在编译时提示出错;而引用静态变量一般直接使用类名或接口名,从而避免产生歧义,因此也不存在多继承的第一个缺点。
对于一个接口继承多个父接口的情况也一样不存在这些缺点。

转载于:https://my.oschina.net/u/1240908/blog/173746

多继承有什么坏处,为什么java搞单继承,接口为什么可以摈弃这些坏处相关推荐

  1. python打印等腰三角形的性质_C++多继承有什么坏处,Java的接口为什么可以摈弃这些坏处?...

    这是个历史遗留问题. The History of Object Oriented Programming​www.exforsys.comObject-oriented programming​en ...

  2. java继承总结_JAVA笔记:Java中的继承总结

    继承:在Java中使用extends关键字来实现类的继承  ,extends意思就是派生,所以子类也叫派生类,继承的主要目的是扩展类的内容 操作格式: class A{}; class B exten ...

  3. java中继承和多态的实验,Java中的继承和多态

    我有两个类:Triangle和RightAngledTr. RightAngledTr继承自Triangle.代码如下: 三角类: class Triangle { public void draw( ...

  4. 015——继承(来 , 看看Java中的继承关系)

    目录 继承 继承概述.使用继承的好处 什么是继承 使用继承的好处 继承后子类的特点? 案例演示 继承的设计规范.内存运行原理 继承的设计规范 为什么 内存运行原理 继承的特点 子类是否可以继承父类的构 ...

  5. Java面向对象:继承

    面向对象三大特征之二:继承 目录 面向对象三大特征之二:继承 1.继承是什么: 2.继承的好处 继承概述的总结 1.什么是继承?继承有什么好处? 2.继承的格式是什么样的? 3.继承后子类的特点是什么 ...

  6. Java学习---day07_继承及final、Object的介绍

    Java学习-day07 简介: 在java中存在继承的思想,来提高代码的复用性,代码的拓展性. 程序中的继承,是类与类之间的特征和行为的一种赠予或获取.一个类可以将自己的属性和方法赠予其他的类,一个 ...

  7. Java中继承和实现的区别【单继承,多实现】

    继承:如果多个类的某个部分的功能相同,那么可以抽象出一个类出来,把他们相同的部分都放到父类中,让他们都继承这个类. 实现:如果多个类处理的目标都是一样的,但是处理的方法不同,那么就可以定义一个接口,让 ...

  8. java中单根_通俗易懂的告诉你什么是java的单根继承结构

    花10分钟认真的看完一篇文章,或许会有意想不到的收获! 我们都知道java是单继承的,就是一个类只能extends一个父类.但是你知道吗,其实java中有一个类是所有类的父类,就是Object类,这是 ...

  9. Java 实现“多继承”

    一.Java语言特点 Java是一种简单.面向对象.分布式.易读.鲁棒.安全.结构明晰.可移植.高性能.多线程.动态的语言. 面向对象(继承.封装.多态) 一次编译,到处运行(JVM实现跨平台运行) ...

最新文章

  1. 2018-4-7 进化类算法------1、遗传算法(GA)
  2. SmartOS之以太网精简协议栈TinyIP
  3. Composer The openssl extension is required for SSL/TLS protection
  4. mariab修改mysql端口_修改mysql/MariaDB数据库的端口号+远程
  5. Buildroot构建指南——根文件系统(Rootfs)
  6. 2014_anshan_onsite
  7. MVC Controller与ActionResult的返回值
  8. 验证必须是数字php,Element 中表单非必填数据项 必须为数字的验证问题
  9. c语言中输入字符用什么作用是什么意思,C语言编程问题
  10. fclose在c语言中的作用,c语言fcloseall函数用法实例介绍
  11. Python菜鸟入门:day05列表
  12. 京东排行第一,近 4 万好评,这本 Python 书究竟好在哪?
  13. JAVA Swing添加表格
  14. 计算机后台打印机程序,打印机不能正常工作,提示'操作无法完成,后台打印程序服务没有运行'的解决方法...
  15. 4月6日——4月10日课程表
  16. android界面自动跳转,android实现欢迎界面的自动跳转
  17. 在手机与计算机之间进行文件传输的方式,电脑和手机传输文件方法_电脑和手机如何传文件-win7之家...
  18. 防止多次触发click事件
  19. 淘宝自动回复机器人配置手册——目前2018年淘宝主流自动回复软件一览
  20. bzoj千题计划268:bzoj3131: [Sdoi2013]淘金

热门文章

  1. maven仓库执行脚本(clearLastUpdated.bat)
  2. stream的filter用法
  3. android开发中Switch开关在Dialog中不显示
  4. 利用Python语言Appium启动ios app
  5. CentOS 7 安装.NET Core 2.0
  6. hdu 2795(单点改动)
  7. 第二阶段团队项目冲刺第三天
  8. form表单提交时,同一个名字的input类型的两个同时提交会覆盖吗
  9. 【转】为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换?...
  10. JavaScript学习笔记(十五)