接口和抽象类是Java设计中最基本的概念,它们都不能实例化对象,都可以实现多态,也都能用来创建匿名内部类。但实际使用上还有很多的不同。

  1. 两者的语法定义不同,对应的设计抽象关系也不同,接口主要是对行为的抽象,表示本质相似的关系,即like-a关系,而抽象类可以对数据和行为抽象,表示本质相同即has-a关系。
  2. 抽象类中的属性和方法可以通过各种访问修饰符修饰,但接口中的变量默认是 public static final的,接口中的方法默认是public abstract的。
  3. JDK8中接口可以定义静态方法和默认方法,其中静态方法只能通过接口名调用,而默认方法可以被它的实现类调用,实现类可以根据实际情况是否重写默认方法。如果实现类实现了多个接口有重名的默认方法则必须要重写默认方法,如果实现类同时继承了其它类中有方法和接口默认方法同名的则优先调用父类的方法。
  4. JDK9中再次对接口进行了增强,允许定义非共有的静态方法,方便接口静态方法和默认方法实现时私有重复代码的封装。
  5. 接口可以不含抽象方法仅表示一个标志,比如序列化接口,抽象类中可以不含抽象方法,就为了不能实例化对象。接口只能继承接口,抽象类可以实现接口,继承普通的类,也可以继承抽象类。

最新文章

  1. Enterprise Solution 开源项目资源汇总 Visual Studio Online 源代码托管 企业管理软件开发框架
  2. Android知识杂记(四)
  3. 前端安全配置之Content-Security-Policy(csp)
  4. Spring中@Async用法总结
  5. IOS中图片拉伸技巧与方法总结(转载)
  6. CHANGE DEFAULT FTP PORT FOR VSFTP
  7. Oracle 多版本控制
  8. NEXT | 不错过任何一个新产品
  9. OBIEE 12C
  10. leetcode day8
  11. wpf之StackPanel、WrapPanel、WrapPanel之间的关系
  12. Uva10129 - Play on Words 欧拉通路 DFS
  13. HashMap、Hashtable、ConcurrentHashMap的原理与区别
  14. Linux 驱动——Button驱动2
  15. C# -- 内插字符串的使用
  16. java-Array数组常用操作例子(基础必备)
  17. 前端html
  18. MySQL错误[ERR] 1064 - You have an error in your SQL syntax;
  19. docker swarm英文文档学习-2-关键概念
  20. 关于maven:调整你的maven的jdk版本为 xxxx

热门文章

  1. Less、Sass和SCSS
  2. 【NET Core】.NET Core中读取json配置文件
  3. Spring.Net —IOC详解
  4. 整理this笔记
  5. VUE.js 简单引用
  6. python+unittest+requests+HTMLRunner编写接口自动化测试集
  7. 『Python CoolBook』使用ctypes访问C代码_上_用法讲解
  8. 『TensorFlow』读书笔记_多层感知机
  9. PAT 1069 The Black Hole of Numbers
  10. IPFS初探