JDK 8时代的抽象类与接口

在新的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() ]的默认方法。

netBeans8CompilerErrorMultipleInterfacesSameDefaultMethodSignatures

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

结论

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

察看linux内存使用情况

free功能说明&#xff1a;显示内存状态。语  法&#xff1a; free [-bkmotV][-s <间隔秒数>]补充说明&#xff1a;free指令会显示内存的使用情况&#xff0c;包括实体内存&#xff0c;虚拟的交换文件内存&#xff0c;共享内存区段&#xff0c;以及系统核心使用的缓冲区…

ajax请求拿到多条数据拼接显示在页面中

首先我们拿到的了一坨Json数据 如下 然后通过ajax请求拿到数据 在ajax的success方法中处理和使用数据&#xff1a; 其中包括&#xff1a; 用eval处理这种数据 var outStr eval(( data.data )); 用循环取出数据并使用 $.each(outStr,function(index){ console.log(outStr[i…

onesignal php,PHP FPM源代码反刍品味之五:信号signal处理

unix 的信号signal常用于进程管理.比如管理员或者操作系统通过向master进程实现重启和关闭服务&#xff0e;master进程通过向worker进程发信号管理worker进程&#xff0e;通常会在进程自定义信号处理函数,处理相关的逻辑.自定义信号处理函数,从使用者的角度看,很简单,有点像快捷…

【leetcode】657. Robot Return to Origin

Algorithm 【leetcode】657. Robot Return to Origin https://leetcode.com/problems/robot-return-to-origin/ 1&#xff09;problem There is a robot starting at position (0, 0), the origin, on a 2D plane. Given a sequence of its moves, judge if this robot ends up…

HTTP Developer's Handbook Part V: Security 读书笔记

Thus, the SSL handshake takes place once a TCP connection has been established between the Web client and Web server and before the initial HTTP request is sent.转载于:https://www.cnblogs.com/huyi/archive/2010/11/06/1870686.html

Spring 3.2矩阵变量是什么? - 第1部分

Spring 3.2引入了对处理“矩阵变量”的支持&#xff0c;并且可能像大多数开发人员一样&#xff0c;我从未听说过它们。 因此&#xff0c;经过一番研究&#xff0c;我对这个博客的了解是什么&#xff0c;以及您可以如何使用它们。 和往常一样&#xff0c;如果我错了&#xff0c;…

登录界面点击登录后如何延迟提示成功的div的显示时间并跳转

需求&#xff1a; 在登录页面点击sign in跳转到下个页面之前&#xff0c;我需要显示成功的窗口2秒然后自动关闭 那我们来研究下setTimeout: 关于这个setTimeout首先下面的代码实现的是两秒之后再显示SuccLogin窗体。 setTimeout(function () {$(".SuccLogin").sho…

MSN和QQ文件传输速度解析

基本上就是说msn传输文件是使用TCP&#xff0c;而QQ使用UDP&#xff0c;这就是两者传输速率的区别…… 发现很多情况下&#xff0c;msn传输文件比qq要慢&#xff0c;倒不是说msn没有快的时候&#xff0c;但是大部分的时候是真的比QQ慢&#xff0c;连我这种神经比较大条的人都注…

Java 队列清空,如何清空Actor死信队列 - java

我有一个用例&#xff0c;我想清空我的Akka演员的死信队列。我的本地演员与远程演员交谈&#xff0c;并定期向其发送一些数据。我认为这些会排队等待&#xff0c;因为当远程角色可用时&#xff0c;会发生大量事件。是否可以限制此队列的大小&#xff1f;甚至更好地访问它&#…

[minecraft]mcCoder制作有感

mcCoder是一个minecraft-forge-mod制作库&#xff0c;力图让mod制作者可以更简单的制作mod&#xff0c;减少mod制作者的mod制作难度。 在GitHub上关注这个项目&#xff1a; 原理 mcCoder主要使用&#xff0c;JSR 269 Pluggable Annotation Processing API&#xff0c;辅以使用a…

关于导入oracle10g的数据到sqlserver2005里的方案总结

由于项目需求&#xff0c;现需要将oracle的数据全部导入到sqlserver中&#xff0c;一下算是自己的总结小计吧。 sqlserver有自己的导入数据的功能&#xff0c;其中就有提供两种方式从oracle导入数据。 两种方式就不仔细说了&#xff0c;可以google到的。 遇到的问题如下&…

js文件处理File

支持File API的浏览器有IE10 ,Firefox3.5 &#xff0c;Opera10.6 &#xff0c;Safari5 ,Chrome。 1.在表单元素上<input type"fiel" name"file" id"file" />&#xff0c;可以选择一个或多个文件&#xff0c;通过获取文件元素对象的集合fi…

在IntelliJ IDEA中为不同的数据源着色

IntelliJ IDEA中的数据库插件是使用数据库中数据的有用工具。 只要我们有了JDBC驱动程序来连接数据库&#xff0c;就可以配置数据源。 然后&#xff0c;我们可以运行查询&#xff0c;检查表的内容并使用数据库工具窗口更改数据。 具有多个数据源&#xff08;例如开发和测试环境…

.NET Framework 如何:提高性能

以下编程做法可以节省内存和改善设备应用程序的性能。 使用 Windows 窗体和图形节省内存 对提供 BeginUpdate 和 EndUpdate 方法的控件使用这两种方法&#xff0c;提供这两种方法的控件包括 ComboBox、ListBox、ListView、ToolStripComboBox 和 TreeView。 重新定位控件时&…

[蓝桥杯]ALGO-185.算法训练_Trash Removal

题目描述&#xff1a; 代码如下&#xff1a; 1 #include <algorithm>2 #include <cstdio>3 #include <cstdlib>4 #include <cmath>5 #include <cstring>6 #include <iostream>7 #define INF 0x7fffffff8 using namespace std;9 10 typed…

php检测数组类型,javascript中通过哪些方法来检测数组类型?

typeof操作符。对于Function、String、Number、Undefined这几种类型的对象来说&#xff0c;不会有什么问题&#xff0c;但是针对Array的对象就没什么用途了&#xff1a;alert(typeof null); // "object"alert(typeof []); // "object"instanceof当只有一个…

值得记录的(一)

简要记录维护 jQuery 项目相关需求实现的细节&#xff0c;方便日后回顾。样式相关 flex 布局justify-content: flex-start; 和 justify-content: center;flex-wrap: wrap; 换行cursor: pointer; 手型的使用jQuery 左右移动 animate 使用 jQuery 实现左右按钮移动效果 - 类似…

跟踪异常–第4部分– Spring的邮件发件人

如果您阅读过本系列以前的任何博客&#xff0c;您可能会记得我正在开发一个小型但几乎具有工业实力的应用程序&#xff0c;该应用程序在日志文件中搜索异常。 您可能还记得&#xff0c;我现在有一个可以包含一堆结果的类&#xff0c;需要将其发送给感兴趣的任何人。 这将通过实…

从客户端...中检测到有潜在危险的 Request.Form 值

在.net中&#xff0c;Request时出现有HTML、Javascript等字符串时&#xff0c;系统会认为是危险值&#xff0c;运行显示“从客户端……中检测到有潜在危险的Request.Form值”这样的错。解决办法&#xff1a; &#xff08;1&#xff09; 在.aspx文件头中加入这句&#xff1a; …

php ci model条件查询,Laravel关系模型指定条件查询方法

对于关系模型来说&#xff0c;有时候我们需要甄别关联后结果&#xff0c;例如&#xff0c;班级和学生是一对多关联&#xff0c;我现在查询班级&#xff0c;但是想只显示正常状态&#xff0c;即状态为1的学生&#xff0c;因为有的学生从这个班级里面删除了&#xff0c;状态是4&a…