java 接口的静态方法_Java8新特性:接口的默认方法与接口的静态方法

默认方法允许接口方法定义默认实现,子类方法不必须实现此方法而就可以拥有该方法及实现。如下:

public interface DefaultFuncInter {

int getInt();

default String getString(){

return "Default String";

}

}

默认方法的优势

默认方法主要优势是提供了一种扩展接口的方法,而不破坏现有代码。如果一个已经投入使用的接口需要扩展一个新的方法,在JDK8以前,我们必须再该接口的所有实现类中都添加该方法的实现,否则编译会出错。如果实现类数量很少且我们有修改的权限,可能工作量会少,但是如果实现类很多或者我们没有修改代码的权限,这样的话就很难解决了。而默认方法提供了一个实现,当没有显式提供时就默认采用这个实现,这样新添加的接口就不会破坏现有的代码。

默认方法另一个优势是该方法是可选的,子类可以根据不同的需求而且经override或者采用默认实现。例如我们定义一个集合几口,其中有增、删、改等操作,如果我们的实现类90%都是以数组保存数据,那么我们可以定义针对这些方法给出默认实现,而对于其他非数组集合或者有其他类似业务,可以选择性复写接口中默认方法。(由于接口不允许有成员变量,所以本示例旨在说明默认方法的优势,并不具有生产可能性)具体参照如下代码:

/**

* 定义接口,并包含默认实现方法

*/

public interface CollectionDemoInter {

//增加默认实现

default void addOneObj(Object object){

System.out.println("default add");

}

//删除默认实现

default void delOneObj(Object object){

System.out.println("default del");

}

//更新默认实现

default void updateOneObj(Object object){

System.out.println("default del");

}

//接口定义需要实现方法

String showMsg();

}

/**

* 基于数组的集合实现类,增删改使用默认方法

*/

public class Collection4Array implements CollectionDemoInter {

@Override

public String showMsg() {

return null;

}

}

/**

* 特殊集合,不允许删除元素

*/

public class NodelCollection implements CollectionDemoInter {

@Override

public String showMsg() {

return null;

}

@Override

public void delOneObj(Object object){

System.out.println("none del");

}

}

通过上述代码,大家可以很清楚的发现,如果在接口中定义默认方法,则子类不需要必须实现该默认实现,如果有特殊需求或者需要,则可以Override该实现。

需要注意

如果一个类实现两个或两个以上接口,并且多个接口中包含统一默认方法,此时,编译器将报错。这种情况,我们必须让子类Override该方法,否则无法编译通过。

在所有的情况,类实现的优先级高于接口的默认实现,也就是先使用自己类中定义的方法或者是父类中的方法。

如果是一个接口继承了另外一个接口,2个接口中也包含相同的默认方法,那么继承接口的版本具有更高的优先级。比如A扩展了B接口,那么优先使用A类里面的test方法。

通过使用super,可以显式的引用被继承接口的默认实现,语法如下:InterfaceName.super.methodName()。

接口中的静态方法

java8中为接口新增了一项功能:定义一个或者更多个静态方法。类似于类中的静态方法,接口定义的静态方法可以独立于任何对象调用。所以,在调用静态方法时,不需要实现接口,也不需要接口的实例,也就是说和调用类的静态方法的方式类似。语法如:接口名字.静态方法名。

interface A

{

static String getName()

{

return "接口A。。。";

}

}

public class Test implements A

{

public static void main(String[] args)

{

System.out.println(A.getName());

}

}

注意,实现接口的类或者子接口不会继承接口中的静态方法。static不能和default同时使用。在java8中很多接口中都增加了静态方法,比如下面代码:

public class Test

{

public static void test(List list)

{

//直接使用Comparator的静态方法

list.sort(Comparator.comparing(String::length));

}

public static void main(String[] args)

{

List list = Lists.newArrayList("122","2","32");

test(list);

for (String str : list)

{

System.out.println(str);

}

}

}

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

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

相关文章

前端又一本升级版图书上市了,听说比第一版还好看

哇!听说《Node.js实战(第2版)》来了?没错!这本让读者久等了的书,终于上市啦!最近的升级版图书还是很多的,但是小伙伴对这本的期待值依旧不减!毕竟第一版在豆瓣上获得了 8…

人气TOP|当红炸子鸡「小明机器人」,出道走花路啦

在全球新一轮技术革命的时代背景下,越来越多的企业走上了数字化之路。伴随着企业对数字化转型的持续关注,各行各业对“数字化员工”即RPA(机器人流程自动化,Robotic Process Automation)的需求也越发旺盛,都…

MFC和Win32之三___CGdiObject类和windows Gdi对象

小结: 前面讲到的windows窗口对象,在windows下用句柄来代表之,并且用了一个数据结构WNDCLASS(窗口类)来描述之。同理,windows的Gdi对象也有一些句柄来代表之(比如hPen等)&#xff0c…

java io流 教程_Java基础教程:IO流与文件基础

Java:IO流与文件基础说明:本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦。走进流什么是流流:指的是从源到目的地的字节的有序序列。在Java中,可以从其中读取一个字节序列的对象称作 输入流,…

用数学模型向你解释离婚

A Mathematical Model of Sentimental Dynamics Accounting for Marital Dissolution解释离婚的情感动力学数学模型背景西方社会的离婚是普遍存在的。它提出了重大的科学和社会学问题,不管是理论上还是解决方式上。学者和问题处理专家认为存在一种情感关系热力学第二…

记一次 .NET医疗布草API程序 内存暴涨分析

一:背景 1. 讲故事我在年前写过一篇关于CPU爆高的分析文章 再记一次 应用服务器 CPU 暴高事故分析 ,当时是给同济做项目升级,看过那篇文章的朋友应该知道,最后的结论是运维人员错误的将 IIS 应用程序池设成 32bit 导致了事故的发生…

自已做的第一个autoconf程序(不断完善中)

2019独角兽企业重金招聘Python工程师标准>>> 1、先写个简单的main函数,并按如下目录结构存放: timesync-- |--conf |--include |--lib |--src 2、在最上层目录下,执行autoscan,生成configure.scan,并改名为…

3des加密 java php_php 3DES加密如何兼容Java

Java源码:import java.security.Security;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;public class ThreeDES {private static final String Algorithm "DESede"; //定义 加密算法,可用 DES,DES…

轻松看懂机器学习十大常用算法

通过本篇文章大家可以对ML的常用算法形成常识性的认识。没有代码,没有复杂的理论推导,仅是图解,介绍这些算法是什么以及如何应用(例子主要是分类问题)。以后有机会再对单个算法做深入地解析。今天的算法如下&#xff1…

撸码是需要直觉的

随着撸码的时间增加&#xff0c;码感也会加强&#xff0c;今天看一个编码直觉案例吧&#xff01;案例&#xff1a;需求&#xff1a;把查询到的数据列表生成csv文件nuget包&#xff1a;CsvHelper数据实体类&#xff1a;/// <summary>/// 商品/// </summary>public c…

linux视频教程之vsftp_B

这次主要说一下VSFTP的扩展应用 max_clients100  最大连接数max_per_ip5   每个IP最大连接数local_max_rate500000 本地用户传输的最大数anon_max_rate200000 匿名用户传输的最大数单位是字节这个就要等一会了&#xff0c;我刚才不是只设了50嘛如果是没设的话…

java collator_Java Collator compare(String, String)用法及代码示例

java.text.Collat​​or类的compare()方法用于比较两个字符串的强度&#xff0c;并根据结果返回0&#xff0c;正值和负值作为输出。用法:public abstract int compare(String source,String target)参数&#xff1a;此方法需要两个字符串之间进行比较。返回值&#xff1a;如果第…

MATLAB常用算法与应用实例分享来袭!

小天从大学开始接触数学建模&#xff0c;便开启资料收集功能。经过近几年的积累和沉淀&#xff0c;再加上对数学建模领域的深入研究&#xff0c;收集整理了丰富的数学建模资料&#xff0c;内容涵盖“MATLAB常用算法”&#xff0c;“MATLAB算法应用实例”等。截止到今天&#xf…

git的安装与使用(一)--windows平台 .

1、Create github Account &#xff08;在github网站上创建一个账号&#xff09; eg. you used the email: taitoyahoo.com 2、Download && install MsysGit (下载windows平台下的git软件) Then open the git bash , input the commends $ git config --global…

C# WPF项目实战(经典)

目的&#xff1a;输出两台摄像头图像和两路设备图像&#xff0c;每一路设备截图6张主要知识&#xff1a;1. 通过SDK调取摄像头图像&#xff0c;并对图像进行剪裁&#xff1b;2. WPF中定时器DispatcherTimer用法&#xff1b;3. WPF中跨线程访问控件方法Dispatcher.Invoke((Actio…

4个终于被破译的世界级密码

全世界有3.14 % 的人已经关注了数据与算法之美很多时候&#xff0c;一个设计精巧的密码就像数学难题一样&#xff0c;许许多多难以破解的密码让人青丝泛白&#xff0c;至今仍未见天日。不过&#xff0c;也有一些密码中的幸运儿&#xff0c;最终仍然迎来了真相大白的那天。秘密组…

NET问答: 如何在 ASP.NET Core 的 .json 文件中读取 AppSettings ?

咨询区 Oluwafemi&#xff1a;在 appsettings.json 中我有如下的 AppSettings 实体数据&#xff0c;如下代码所示&#xff1a;{"AppSettings": {"token": "1234"} }我在网上搜了很久&#xff0c;寻找如何从 .json 文件中获取 AppSettings 实体&a…

java虚拟机工作原理图_Java虚拟机工作原理

首先我想从宏观上介绍一下Java虚拟机的工作原理。从最初的我们编写的Java源文件(.java文件)是如何一步步执行的&#xff0c;如下图所示&#xff0c;首先Java源文件经过前端编译器(javac或ECJ)将.java文件编译为Java字节码文件&#xff0c;然后JRE加载Java字节码文件&#xff0c…

如何快速测试与数据库的连接并得到连接字符串

刚做程序开发的人&#xff0c;常常为如何连接数据库&#xff0c;怎么写连接字符串而困惑。做产品安装的服务人员&#xff0c;也常常为如何快速测试本机与数据库的连接状况而头疼。这里&#xff0c;给出一个简单快速的实现方法&#xff1a;*.udl文件。 第一步&#xff1a;创建“…

奇异值的物理意义是什么?

全世界有3.14 % 的人已经关注了数据与算法之美矩阵奇异值的物理意义是什么&#xff1f;或者说&#xff0c;奇异值形象一点的意义是什么&#xff1f;把m*n矩阵看作从m维空间到n维空间的一个线性映射&#xff0c;是否&#xff1a;各奇异向量就是坐标轴&#xff0c;奇异值就是对应…