java8新特性:interface中的static方法和default方法
java8中接口有两个新特性,一个是静态方法,一个是默认方法。
static方法
java8中为接口新增了一项功能:定义一个或者多个静态方法。
定义用法和普通的static方法一样:
public interface InterfaceTest {
/**
* 接口中的静态方法
*/
static void testStatic() {
System.out.println("我是接口的一个静态方法");
}
}
调用的方式和静态类调用静态方法一样:
InterfaceTest.testStatic(); // 我是接口的一个静态方法
这里要注意的是,实现接口的类或者子接口不会继承接口中的静态方法。
default方法
在接口中,增加default方法,是为了既有的成千上万的Java类库的类增加新的功能,且不必对这些类进行重新设计。因此它既被称为默认方法,又被称为拓展方法。
比如说,只需要在Collection接口中增加default Stream stream(),相应的Set和List接口以及它们的子类都会包含此方法,不必再去为每个子类重新copy这个方法。
default方法的出现,允许了我们在接口中添加非抽象的方法实现。
实现单一接口,仅实现接口:
public interface InterfaceTest {
/**
* 接口下的静态方法
*/
static void testStatic() {
System.out.println("我是接口下的静态方法");
}
/**
* 接口下的默认方法
*/
default void testDefault() {
System.out.println("我是接口下的默认方法");
}
}
/**
* 只实现这个接口
*/
public class InterfaceTestImpl implements InterfaceTest {
}
仅实现接口的运行:
InterfaceTest.testStatic(); // 我是接口下的静态方法
new InterfaceTestImpl().testDefault(); // 我是接口下的默认方法
如果接口中的默认方法不能满足某个实现类的需要,那么实现类可以覆盖默认方法。
实现单一接口,并重写接口中的default方法:
public class InterfaceTestImpl implements InterfaceTest {
/**
* 跟接口default方法一致,但不能再加default修饰符
*/
@Override
public void testDefault(){
System.out.println("我重写了接口的默认方法");
}
}
重写了default方法的运行:
InterfaceTest.testStatic(); // 我是接口下的静态方法
new InterfaceTestImpl().testDefault(); // 我重写了接口的默认方法
实现多个接口,且接口中拥有相同的default方法和static方法:
public class InterfaceATestImpl implements InterfaceTest, InterfaceTest1{
@Override
public void testDefault() {
System.out.println("我重写了两个接口相同的默认方法");
}
}
重写了两个接口相同的default方法的运行:
InterfaceTest.testStatic(); // 我是接口下的静态方法
new InterfaceTestImpl().testDefault(); // 我重写了两个接口相同的默认方法
如果实现多个接口的时候,每个接口都有相同的default方法,则必须要重写该方法。
"人的前半生没有对错,只有成长。"
java8新特性:interface中的static方法和default方法的更多相关文章
- Java8新特性interface中的static方法和default方法
static方法 java8中为接口新增了一项功能:定义一个或者更多个静态方法.用法和普通的static方法一样. 代码示例 public interface InterfaceA { /** * 静 ...
- Java8新特性(一)_interface中的static方法和default方法
什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合.stream方法就是接口Colle ...
- JS中的call()方法和apply()方法用法总结
原文引自:https://blog.csdn.net/ganyingxie123456/article/details/70855586 最近又遇到了JacvaScript中的call()方法和app ...
- JS中的call()方法和apply()方法用法总结(挺好 转载下)
最近又遇到了JacvaScript中的call()方法和apply()方法,而在某些时候这两个方法还确实是十分重要的,那么就让我总结这两个方法的使用和区别吧. 1. 每个函数都包含两个非继承而来的方法 ...
- js中的splice方法和slice方法简单总结
slice:是截取用的 splice:是做删除 插入 替换用的 slice(start,end): 参数: start:开始位置的索引 end:结束位置的索引(但不包含该索引位置的元素) 例如: va ...
- Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机
1.今天在做数据库升级的时候,遇到一个问题,就是onCreate方法和onUpgrade方法的执行时机的问题,这个当时在操作的时候,没有弄清楚,很是迷糊,后来看了相关的博客由于转发受限所以copy了一 ...
- Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机--(转)
原文:http://blog.csdn.net/jiangwei0910410003/article/details/46536329 今天在做数据库升级的时候,遇到一个问题,就是onCreate方法 ...
- Mapper类/Reducer类中的setup方法和cleanup方法以及run方法的介绍
在hadoop的源码中,基类Mapper类和Reducer类中都是只包含四个方法:setup方法,cleanup方法,run方法,map方法.如下所示: 其方法的调用方式是在run方法中,如下所示: ...
- java 中的set方法和get方法的理解
get的意思是获取,set的意思是设置. get方法和set方法是实现类的封装访问的很好的工具. 当类中的变量设为private 时,他的意思就是说,只能通过自身和子类的访问,但是对于别的其他的类来说 ...
随机推荐
- dp 动态规划 蘑菇
蘑菇真的贵,友情价更高 Description 由于提莫为巡逻准备的蘑菇太多了,多余的蘑菇路上种不下,于是他精心挑选了一些蘑菇拜访他的好朋友小炮 提莫的蘑菇一共有n个,对于编号为i的蘑菇魔力值是a ...
- 使用 vagrant新建Linux虚拟机
准备工作 1.下载软件 2.安装软件 2.1 安装VirtualBox-5.1.34-121010-Win.exe 2.2 安装vagrant_2.0.3_x86_64.msi 3.新建 执行指令D: ...
- 如何学习Linux性能优化?
如何学习Linux性能优化? 你是否也曾跟我一样,看了很多书.学了很多 Linux 性能工具,但在面对 Linux 性能问题时,还是束手无策?实际上,性能分析和优化始终是大多数软件工程师的一个痛点.但 ...
- 分享一个前后端分离的web项目(vue+spring boot)
Github地址:https://github.com/smallsnail-wh 前端项目名为wh-web 后端项目名为wh-server 项目展示地址为我的github pages(https:/ ...
- 彻底关掉MyEclipse的自动校验,特别是对js文件的校验!!
百度搜出来的一大堆方法都没有用,因为他们都是一样的,让你关掉校验:Window -->Preferences -->MyEclipse -->单击Validation. 但是还是没用 ...
- 操作循环的关键字switch,break,return的应用及区别
break 使用break结束循环 break可以终止循环 和 switch语句的运行; break用于结束一个循环,即跳出循环体,执行循环体之后的代码: switch 使用continue提前结束 ...
- 项目代码迁移(使用git)
克隆老仓库(裸仓库):git clone --bare git@codehub.devcloud.huaweicloud.com:e2f197xxxxxxx19fc4ae7348b2ed41/Node ...
- 【Atcoder hbpc C 183】1=0.999...
Atcoder hbpc C 题意:给n个循环小数或者有限小数,问其中有多少个互不相同的. 思路:我的思路比较繁琐. 首先我们考虑分数化小数:假设原来的数是\(a.b(c)\),那么这个分数就是\(a ...
- JavaScript输入表单数据正则验证规则
emailNameReg: /^(([a-zA-Z0-9]+\w*((\.\w+)|(-\w+))*[\.-]?[a-zA-Z0-9]+)|([a-zA-Z0-9]))$/, //匹配邮箱名称 ema ...
- Groovy语言学习--语法基础(5)
至此groovy语言学习-语法基础就结束了,新的工作已经安排下来,要干活了. 对groovy了解到一定程度之后就可以在java项目中对其进行引入了.为此新建了一个微型的项目,个人觉得千言万语不如代码实 ...