首先说明一下,JDK1.8以后接口可以有默认方法和静态方法以及私有方法。

一、概念:

  接口(interface):是抽象类的变体,其中所有的方法都是抽象的且不能有方法体,而且只能定义 static final 成员变量。例如:public static final int MAX_VALUE = 0x7fffffff;

  抽象类(abstract class):声明方法的存在但不去实现它的类叫做抽象类。抽象类中可以有实现了的方法,也可以没有实现了的方法;抽象类中可以没有抽象的方法,但有抽象方法的类一定是抽象类。抽象类与普通类最大的区别是它不能被直接实例化,只能通过子类间接实例化。

二、区别

1.两者的共同点:

  (1)两者都是抽象类,都不能被实例化。

    (2) interface实现类及abstract class的子类都必须要实现已经声明的抽象方法。

2.两者的不同点:

  (1)一个类可以实现(implements)多个interface,但一个类只能继承(extends)一个abstract class。

  (2)interface强调特定功能的实现,具有哪些功能,而abstract class强调所属关系。

  (3)尽管interface实现类及abstract class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现(只实现其中的抽象方法,覆盖其中已实现了的方法,二者均实现)。

  (4)interface是完全抽象的,只能声明方法,而且只能声明public的方法,不能声明private及protected的方法,不能定义方法体,也不能声明实例变量。

三、为什么Java中采用多接口而没有多继承???

    接口只定义了你做什么,而不关心你怎么做;

    如果是多继承,有可能两个类定义的两个方法是做同一件事情的,那么他们的子类就无法选择到底去用哪一个。

最新文章

  1. Scrapy 爬虫 使用指南 完全教程
  2. 详解MVC设计模式
  3. 实现PageProcessor
  4. Junit4测试
  5. 解决sencha touch显示.JSON包含中文数据时显示乱码问题
  6. Markdown基础语法
  7. android 29 ArrarAdapter数组适配器
  8. java测试1
  9. FirewallD 详解
  10. IOS中集合视图UICollectionView中DecorationView的简易使用方法
  11. oralce11g导出dmp然后导入Oracle10g
  12. UNIX网络编程——shutdown 与 close 函数 的区别
  13. ZAB协议(Zookeeper atomic Broadcast)
  14. Unity 动画系统
  15. 「HAOI2018」染色 解题报告
  16. Python 中的__new__和__init__的区别
  17. 2018-2019-2 网络对抗技术 20165202 Exp2 后门原理与实践
  18. Maven私服Nexus详解
  19. Linux下停止没有关闭的远程登陆终端
  20. python数据字典的操作

热门文章

  1. Solution -「多校联训」数学考试
  2. C语言strtok_s函数
  3. macbook安装scala、hadoop、saprk环境
  4. .NET 云原生架构师训练营(权限系统 系统演示 EntityAccess)--学习笔记
  5. Python中读写文件三部曲
  6. 基于nodejs的阿里云DDNS服务,支持多网卡绑定
  7. HTML表格总结
  8. python-利用json模块处理json数据几个函数总结
  9. 【转】可见性、原子性和有序性问题:并发编程Bug的源头
  10. 【C# .Net GC】sos.dll 混合模式调试(托管调试+本机)