jdk8 接口抽象类区别

在新的Java 8日期和时间API:Stephen Colebourne的访谈中 , Stephen Colebourne告诉Hartmut Schlosser :“我认为最重要的语言更改不是lambda,而是接口上的静态和默认方法。” Colebourne补充说:“添加默认方法消除了使用抽象类的许多原因。” 在阅读本文时,我意识到Colebourne是正确的,并且当前使用抽象类的许多情况都可以用JDK 8默认方法的接口替换。 这在Java世界中非常重要,因为抽象类和接口之间的差异一直是困扰新Java开发人员试图理解差异的问题之一。 在许多方面,在JDK 8中区分两者甚至更加困难。

在线论坛和博客中有许多示例,讨论了Java接口和抽象类之间的区别。 这些包括但不限于JavaWorld的Abstract类与interfaces , StackOverflow的何时必须使用接口代替抽象类? , 接口和抽象类之间的区别 ,Java中的10个抽象类和接口面试问题 ,曾经有用且有用的答案,现在它们中的许多已经过时了,对于那些刚开始使用Java的Java初学者来说,这可能会更加困惑JDK 8的Java经验。

当我在思考JDK 8世界中Java接口和抽象类之间的其余差异时,我决定看看Java教程对此有何看法。 本教程已更新为反映JDK 8,并且抽象方法和类具有称为“与接口相比的抽象类”的部分,该部分已进行了更新以合并JDK8。本节指出了JDK 8接口与抽象类的异同。 。 它强调的区别是数据成员和方法的可访问性:抽象类允许非静态和非最终字段,并允许方法是公共的,私有的或受保护的,而接口的字段本质上是公共的,静态的和最终的,以及所有接口方法本质上是公共的。

Java教程继续列出了何时应该考虑抽象类以及何时应该考虑接口的项目符号。 毫不奇怪,它们源自前面提到的差异,并且主要与是否需要将字段和方法设置为私有,受保护,非静态或最终(喜欢抽象类)或是否需要专注于键入的能力有关。无需考虑实现(偏好接口)。

因为Java允许一个类实现多个接口但仅扩展一个类,所以当特定实现需要与多种类型关联时,可以认为该接口是有利的。 由于JDK 8的默认方法,这些接口甚至可以为实现提供默认行为。

一个自然的问题可能是:“ Java如何处理实现两个接口的类,这两个接口都描述具有相同签名的默认方法?” 答案是这是编译错误。 在下一个屏幕快照中显示了该快照,该快照显示了当我的类实现两个接口时每个NetBeans 8报告错误的情况,每个接口定义了具有相同签名[ String speak() ]的默认方法。

如上面的屏幕快照所示,显示了一个编译器错误,指出“类...从类型…和…继承…的不相关默认值”(其中,类名,默认方法名和两个接口名是消息中指定的名称) )。 Peter Verhas撰写了一篇详细的文章(“ Java 8默认方法:可以做什么和不能做什么? ”),探讨了与带有相同方法的具有默认方法名称的多重实现接口相关的一些极端情况(陷阱)。

结论

可以说,JDK 8带来了抽象类相对于接口的最大优势。 这样做的含义是,当今使用的大量抽象类很可能会被具有默认方法的接口所取代,而许多将来可能是抽象类的构造现在将成为具有默认方法的接口。

翻译自: https://www.javacodegeeks.com/2014/04/abstract-class-versus-interface-in-the-jdk-8-era.html

jdk8 接口抽象类区别

jdk8 接口抽象类区别_JDK 8时代的抽象类与接口相关推荐

  1. java类接口的区别_【Java基础】java接口和类的区别-瑶瑶吖的回答

    基本语法区别 Java中接口和抽象类的定义语法分别为interface与abstract关键字. 抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为 ...

  2. C#抽象类与接口的区别及应用场合

    本文主要给大家详细介绍C#抽象类与接口的区别及应用场合. 一.抽象类 一句话说重点:抽象是为了繁衍更多的子孙后代,充当类继承时的祖宗(第一代). 抽象类,说道抽象一词,大概大家就已经顾名思义了,不就是 ...

  3. 固态硬盘是什么接口_SATA接口和M.2接口的固态硬盘哪个好?SATA接口和M.2接口的区别...

    机械硬盘作为木桶效应中的短板,在电脑中明显拖了后腿,对于读写速度的发展已经是瓶颈,这也是目前新装机或者升级电脑都会采用固态硬盘一大原因.固态硬盘目前流行且常见的接口分两种,分别SATA接口和M.2接口 ...

  4. 接口与抽象类区别和接口jdk8新特性

    jdk8之前特点对比抽象类 1 接口用interface表示,和类是并列的,定义接口就是定义接口的成员 2 接口只能定义公共抽象方法(public abstract)和全局静态最终变量(public ...

  5. JDK8 中抽象类和接口的区别

    英文原文:https://www.javacodegeeks.com/2014/04/abstract-class-versus-interface-in-the-jdk-8-era.html jdk ...

  6. JDK 8时代的抽象类与接口

    在新的Java 8日期和时间API:Stephen Colebourne的访谈中 , Stephen Colebourne告诉Hartmut Schlosser :"我认为最重要的语言更改不 ...

  7. 方法的重写和重载,接口和抽象类区别

    方法的重写和重载,接口和抽象类区别,新手入门必看!!!!!要记住 方法的重写和重载 重写 重载 接口和抽象类 说明 方法的重写和重载 重写 在Java程序中,类的继承关系可以产生一个子类,子类继承父类 ...

  8. 面试之抽象类和接口的区别

    目录 概述: 一.相同点 : 二.不同点 : 解释为何接口没有构造方法: 概述: 抽象类和接口是两个并列的结构,抽象类也属于类的结构. 一.相同点 : ① 抽象类和接口都不能被实例化. ② 抽象类和接 ...

  9. Java抽象类和接口的区别

    如果一个类含有抽象方法,则称这个类为抽象类.抽象类是用abstract关键词修饰的.因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象.如果一个类继承了抽象类,那么就必须为抽象类中的抽象方法提 ...

最新文章

  1. SQLServer 阻塞的等待类型解析
  2. 管道的概念(匿名管道)
  3. [html] 如何使用html5进行图片压缩上传?
  4. CSS 文本方向 direction属性
  5. vue 文件导入服务器,Vue 如何import服务器上的js配置文件
  6. typecho 调用评论最多热门文章
  7. java中子类继承父类时是否继承构造函数
  8. apache + subversion + Windows认证
  9. Laravel 在哪些地方使用了 trait ?
  10. mysql带入参的存储过程_MySql带参数存储过程()
  11. n1装哪个版本的linux,斐讯t1/N1是装Ubuntu,还是LinuxDeploy,哪个更好?
  12. 广告竞价中为什么采用二价计费
  13. 你住的房子安全吗?-房屋安全鉴定四项须知
  14. windows查看自己的网卡名称
  15. c语言程序中小括号()和大括号{}的本质是什么,C程序中,用一对大括号{}括起来的多条语句称为复合语句,复合语句在语法上被认为是一条语句。...
  16. launch 启动脚本_使用Microsoft Speed Launch快速启动快捷方式
  17. 【单片机】继电器控制
  18. 前端开发文档-学习笔记
  19. 重磅推荐:一套开源的网校系统,无论是自建网校还是接副业都很方便!
  20. 流程引擎(flowable)之会签相关

热门文章

  1. 2021牛客暑期多校训练营3 C-Minimum grid(二分图)
  2. 【二分】【最小生成树】公路修建问题(P2323)
  3. 【DP】剪草(jzoj 1510)
  4. vue.js 接收url参数
  5. 如何在局域网访问Tomcat项目
  6. Oracle入门(十四.5)之识别数据类型
  7. 【Python】字符串和变量拼接的写法
  8. 维护win10注册表
  9. java中的tostring_java 中重写toString()方法
  10. org.springframework.uti包下的StringUtils的使用和org.apache.commons.lang包下StringUtils的使用