用接口实现多继承

在Java中一个子类只被允许继承一个父类,即只允许单继承。但一个类可以实现多个接口,通过实现多个接口的方式满足多继承的设计需求。如果多个接口中有相同的方法,由于它们都是抽象的,子类实现它们不会有冲突。
下面给出一组示例,其中有两个接口InterfaceAInterfaceBAB类实现了这两个接口,继承Object父类。
InterfaceA.java代码如下:

package com.company;public interface InterfaceA {void methodA();void methodB();
}

InterfaceB.java代码如下:

package com.company;public interface InterfaceB {void methodB();void methodC();
}

AB.java代码如下:

package com.company.imp;import com.company.InterfaceA;
import com.company.InterfaceB;public class AB extends Object implements InterfaceA, InterfaceB {@Overridepublic void methodA() {}@Overridepublic void methodB() {}@Overridepublic void methodC() {}
}

从上面的示例可以看出,InterfaceAInterfaceB都有一个相同的方法methodB()。由于接口中的方法都是抽象方法,AB类实现该方法并没有产生冲突。

接口的继承

Java允许接口与接口之间继承。接口之间的继承比类之间的继承简单得多,这也是由于接口中的方法是抽象方法。接口之间的继承同样使用extends关键字。
下面给出一组示例,其中有两个接口InterfaceAInterfaceBInterfaceB继承了InterfaceA,并且还覆盖了InterfaceA中的methodB()方法。ABC类实现了InterfaceB接口。这时,ABC类需要实现两个接口中的所有方法。
InterfaceA.java代码如下:

package com.company;public interface InterfaceA {void methodA();void methodB();
}

InterfaceB.java代码如下:

package com.company;public interface InterfaceB extends InterfaceA {@Overridevoid methodB();void methodC();
}

ABC.java代码如下:

package com.company.imp;import com.company.InterfaceB;public class ABC extends Object implements InterfaceB {@Overridepublic void methodA() {}@Overridepublic void methodB() {}@Overridepublic void methodC() {}
}

事实上在接口中重写方法并没有实际意义,因为方法是抽象的,是留给接口的实现类实现的。

Java 8新特性:接口中的默认方法和静态方法

Java 8在接口中提供了声明默认方法和静态方法的能力。
接口中的默认方法类似于类中的具体方法,需要给出方法的具体实现,修饰符为default关键字。接口中的静态方法类似于类中的静态方法。
实现接口时,接口中原有的抽象方法在实现类中必须实现,默认方法可以根据需要有选择地实现(覆盖),静态方法不需要实现,实现类中不能拥有接口中的静态方法。

抽象类与接口的区别

1.接口支持多继承,而抽象类(包括具体类)只能继承一个父类。
2.接口中不能有实例成员变量,接口所声明的成员变量全部是静态常量(即使不加public static final修饰符)。抽象类与普通类一样,可以声明各种形式的成员变量。
3.由于没有实例成员变量,接口中没有包含构造方法,而抽象类中可以有实例成员变量,也需要构造方法。
4.抽象类中可以声明抽象方法和具体方法。Java 8之前,接口中只有抽象方法,而Java 8之后接口中可以声明默认方法和静态方法。

【Java】接口与继承相关推荐

  1. 腾讯架构师讲解Java接口的继承与抽象类

    在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体.interface为类提供了接口规范. 在继承中,我们为了提高程序的可复用性,引入的继承机制.当时的 ...

  2. java接口的继承是多继承吗

    Java接口 不仅可以继承接口,还可以多继承.接口是常量值和方法定义的集合.接口是一种特殊的抽象类.在java中不允许类多重继承的主要原因是,如果A同时继承B和C,而b和c同时有一个D方法,A如何决定 ...

  3. java接口的继承_Java 接口多继承

    按照理解,一般都是说Java 类是单继承,但可以实现多个接口.但是可以通过接口来实现类的多继承.(如何通过接口来实现多继承???) 那么就一直以为Java里面是单继承,今天看FutureTask源码的 ...

  4. java接口比继承优秀的地方,实现和继承的区别 java 实现接口和继承有什么区别...

    Java中继承和实现的区别 理论上:类只能单继承,接口可以多继承(接口应该叫实现): 实践上:小编们说类的继承一般继承的是事物的属性,如:姓名,年龄,性别 等,而接口的继承(或者说实现)一般是继承事物 ...

  5. Java接口可以继承接口么

    一般来说,类多用于继承接口,但接口可以继承接口么? 接口当然可以继承接口,但要用extends关键字 interface person {int age = 5; //default is final ...

  6. Java 接口和继承

    1.JAVA里没有多继承,一个类只能有一个父类.而继承的表现就是多态.一个父类可以有多个子类,而在子 类里可以重写父类的方法(例如方法print()),这样每个子类里重写的代码不一样,自然表现形式就不 ...

  7. java 接口 抽象类 继承 重载 重写 多态

    4.1 抽象类 在面向对象领域由于抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能实例化的. 同时,抽象类体现了数据抽象的思想,是实现多态的一种机制.它定义了一组抽象的方法, ...

  8. 《JAVA 接口多继承》

    2019独角兽企业重金招聘Python工程师标准>>> 类定义属性和方法 描述某一类事物的抽象 而接口定义的是行为 并不限于任何具体意向 按照逻辑上来说 单继承更明确 一个子类就应该 ...

  9. Java 接口+继承

    接口 在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类,编写接口的方式和类很相似,但是它们属 ...

  10. Java 接口基础详解,java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

最新文章

  1. vim 编写python代码_用Vim编写Python代码
  2. 《高可用MySQL》2 – 单机版MySQL主从配置
  3. Spring学习网址
  4. 使用工具快速找出custom work center使用的ui component
  5. 部署gradle_使用Gradle消除开发重新部署
  6. shell与python的优劣_论python 和 shell的实用性
  7. 支付宝国庆消费报告出炉:景区消费涨9倍
  8. 程序员版《On Call 24 小时》
  9. ecs云服务器搭建php,云服务器 ecs怎么配置php
  10. 使用devcpp遇到的常见错误解决方法
  11. 技能大赛训练题:交换机虚拟化练习
  12. JAVA_调用方法_用户输入姓名打印出欢迎词
  13. python处理word文档中表格 添加一列_Python操作word文档插入图片和表格的实例演示...
  14. 小程序scroll-view文字不能自动换行
  15. python提示takes no arguments_Python创建实例时提示错误takes no arguments,找不到什么原因?...
  16. 记一次网站迁移的过程
  17. 开启Intel VT-x虚拟化
  18. Flutter如何强制竖屏
  19. 百度前端技术学院--零基础--第四天:背景边框列表链接和更复杂的选择器
  20. 计算机表演赛601卢昊洋,小学教导处工作总结(精选3篇).pdf

热门文章

  1. signature=8a8da1744f65c202ddd549875ac05881,Flurform
  2. java正则表达式 以开头结尾_正则匹配 符合以什么开头以什么结尾的
  3. javascript 实现生成GUID / UUID的多种方法
  4. QT - 创建UDP Socket通信
  5. android 更换桌面名称_更改安卓软件名称 android修改应用程序名称
  6. mysql查询出现毫秒值快速解决方法
  7. 【微信小程序】个人信息页面/我的页面
  8. 新一代数据中心光纤布线技术发展趋势
  9. Excel如何将数据拆分开
  10. 数码相框(三、LCD显示文字)