我们都知道,在java当中类只可以单继承,而接口可以多实现.

总结:
(在不重写方法的情况下)接口是可以多继承的,在多继承的过程中子接口并不能对该抽象方法进行修改,到最后,B,C两个method方法在D中合二为一了。

先看一下下面的例子,再来看看这句话哦

我们现在通过菱形继承的例子来验证一下

1.接口的菱形继承(多继承)(抽象方法)


interface  A
{void method();
}
interface  B extends A
{}
interface  C extends  A
{}
interface  D  extends  B,C
{void method(); //方法合二为一
}

我们可以看到,因为抽象方法没有方法体,所以子接口的继承并不会影响该方法。

那,如果换成默认方法呢?

注意:如果接口中的抽象方法被换成默认方法了,且子接口不要脸的重写了默认方法(虽然默认方法是可以不被重写的),那菱形继承就会发生错误。

interface A
{public default void method(){}
}
interface B extends  A
{@Overridepublic  default void method(){System.out.println("B不要脸的重写了A的默认方法");}
}
interface   C extends  A
{@Overridepublic default void method(){System.out.println("C不要脸的重写了A的默认方法");}}
interface D extends B,C
{//编译报错 不能合二为一了
}

你看,子接口继承默认方法并重写了,影响了method方法,所以菱形继承发生错误了。

2.类只能单继承的,

**总结:**因为类在继承的过程中可以重写该方法,B C方法虽然都是method,但是,由于B,C中的method是有方法体的,可以重写内容,所以不一样了。随后,到了D中,这两个方法同名,但又不是重载形式,故矛盾了。

先看看下面的例子,再返回来看上面这段话。

class A
{public void method(){}
}
class B extends  A
{@Overridepublic void method(){System.out.println("bbb");}
}
class  C extends  A
{@Overridepublic void method(){System.out.println("ccc");}}
class D extends B,C
{//类编译错误
}

于是,我们又发现,子类继承父类,重写了这个方法,也影响了该方法,所以菱形继承发生错误了。

本人水平有限,如果有什么不对的地方,欢迎各位大佬指正。

为什么类只能单继承,而接口可以多继承?相关推荐

  1. java 由接口构造对象_Java学习笔记04——类和对象|抽象和接口|构造方法与继承...

    六.Java类 1.  Java中用关键字class来创建类. 2.  类中属性和方法称为类的成员;类的声明和方法要在同一个文件内,不同于C++. 3.  类的定义: [] class [extend ...

  2. java 接口继承_接口是否可继承接口(java)

    展开全部 Java语法中,接口32313133353236313431303231363533e59b9ee7ad9431333366303839可以继承接口,抽象类可以实现接口,抽象类可以继承实体类 ...

  3. php类的继承和,详细对比php中类继承和接口继承

    PHP类继承: 1.PHP类不支持多继承,也就是子类只能继承一个父类,但是支持多层次继承 比如: class frist{ public function __construct(){ echo &q ...

  4. php 接口继承,详细对比php中类继承和接口继承

    PHP类继承: 1.PHP类不支持多继承,也就是子类只能继承一个父类,但是支持多层次继承 比如:class frist{ public function __construct(){ echo &qu ...

  5. java只允许单一继承_问题:Java语言只允许单继承,指每个类只能有一个 ( )

    问题:Java语言只允许单继承,指每个类只能有一个 ( ) 更多相关问题 用List命令显示表文件中的当前记录的命令格式是________. WHERE子句的条件表达式中,可以匹配0个到多个字符的通配 ...

  6. java第四节 类的继承/抽象/接口/多态性

    /* 类的继承 类的继承可以简化类的定义 java只支持单继承,不允许多重继承 可以有多层继承,即一个类可以继承其一个类的子类,如类B继承了类A,类C又可以继承类B 那么类C也间接继承了类A子类继承父 ...

  7. java写一个外网访问的接口_【JAVA基础】一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(中篇)...

    0 前言 初学JAVA时,总会对一些概念一知半解,相互混淆,不明其设计的用意,如类.对象.重载.封装.继承.多态.覆盖.抽象类.接口概念.为便于理解和巩固,本文将基于一个案例及其变形,展现各个概念的定 ...

  8. Java面向对象(接口、匿名内部类、object类、单例、多例)

    1.1接口(抽象类与接口,优先使用接口) 抽象方法和全局常量的集合,使用interface定义,使用implements继承 接口可以多继承(可以向上强制转换) 接口只能有public,一般不写常量 ...

  9. 【C# 复习总结】类、继承和接口

    1 类 定义新的数据类型以及这些新的数据类型进行相互操作的方法 定义方式: class Cat{}class Cat:object{} C#中所有的类都是默认由object类派生来的,显示指定或者省略 ...

最新文章

  1. 并发编程之多进程编程(python版)
  2. 数据结构_顺序栈的代码实践
  3. RAC修改数据库的spfile位置
  4. ALV报表中设置可修改字段
  5. python 基础教程(第二版)
  6. Android之内核学习笔记
  7. ffplay SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can‘t initialize audio client“
  8. C++11多线程----线程管理
  9. 【英语学习】 - 君若不离不弃,吾当生死相依
  10. Node.js ES6模块化
  11. ZigBee协议分析仪Smart PacketSniffer
  12. 动态网站加速,cdn义不容辞
  13. ON_NOTIFY处理消息
  14. 对于TGA格式文件的分析
  15. HTML字体以及图标字体iconfont、Font Awesome的使用
  16. MBA联考-20101213
  17. Typora+Git+Gitee实现个人笔记自动同步
  18. 《好想好想谈恋爱》经典对白
  19. Illustrator如何使用图形对象的特殊效果之实例演示?
  20. chrome升级后无法访问iframe页面

热门文章

  1. 嵌入式linux安装dropbear
  2. HAL库学习之串口通信
  3. PMOS管/NMOS管控制供电电路
  4. 7-10 公路村村通 (最小生成树Prim算法) | PTA数据结构与算法——C语言实现
  5. 58同城网站在登录后,最近几天都不需要重新登录,这个功能是如何实现的
  6. 执行rm -rf /效果
  7. 国产银河麒麟系统源码安装Openvas
  8. 一文全懂,Android程序员最新职业规划
  9. 如何去掉a标签的下划线 各种样式详解
  10. libjpeg的安装与使用