您现在的位置是:亿华云 > 人工智能
详解Java8接口中引入Default关键字的本质原因
亿华云2025-10-09 15:13:17【人工智能】8人已围观
简介接口的常规实现方式熟悉java接口的同学都知道,接口被某些类实现后,一旦在接口中增加了新方法,那么实现该接口的所有类都要实现这个新增的方法(即使这个新增的接口对某些类没有用处)。定义一个接口publi
接口的详解常规实现方式
熟悉java接口的同学都知道,接口被某些类实现后,接口一旦在接口中增加了新方法,中引字那么实现该接口的关键所有类都要实现这个新增的方法(即使这个新增的接口对某些类没有用处)。
定义一个接口
public interface IDemo { void func1(); }类CDemo1实现接口IDemo
public class CDemo1 implements IDemo{ @Override public void func1() { } }类CDemo2实现接口IDemo
public class CDemo2 implements IDemo{ @Override public void func1() { } }在IDemo中新增加方法func2()
public interface IDemo { void func1(); void func2(); }可以看到CDemo1和CDemo2中需要强制实现方法func2(),本质如下图所示:


接口中的原因default
上面的实例导致了前面提出的那个问题,一旦在接口中增加了新方法,详解那么已经实现了该接口的接口所有的类都要实现这个新增的方法!那么,如果是中引字JDK中的某个核心接口需要变更,服务器托管需要新增某些方法呢?关键这个工作量更是可想而知,我们来看一下java.util.Collection这个接口,本质它在jdk1.7中的原因方法包括:

而在JDk 1.8中 Collection接口中包括方法如下:

其中新增的接口,都用default来修饰(jdk1.7升级到jdk1.8后,详解接口的接口重要变化),源代码如下:
default Stream<E> stream() { return StreamSupport.stream(spliterator(),中引字 false); } default Stream<E> parallelStream() { return StreamSupport.stream(spliterator(), true); } default Spliterator<E> spliterator() { return Spliterators.spliterator(this, 0); } default boolean removeIf(Predicate<? super E> filter) { Objects.requireNonNull(filter); boolean removed = false; final Iterator<E> each = iterator(); while (each.hasNext()) { if (filter.test(each.next())) { each.remove(); removed = true; } } return removed; }我们不仅大吃一惊,这还是我们熟知的接口吗?接口中的方法居然有了实现代码!吃惊过后,我们来想想作者的意图。还是上面的代码,我们新增方法func3(),并完成简单的服务器租用实现
public interface IDemo { void func1(); void func2(); default void func3(){ System.out.println("this is default func2"); } }然后查看类CDemo1,一切正常,没有任何错误提示:

实例化CDemo1后,可以正常调用func3方法,代码如下:
public static void main(String[] args) { CDemo1 cd1=new CDemo1(); cd1.func3(); }读到这里发现接口中通过default关键字来进行接口实现的好处了吧,简单四个字就是 “方便扩展” !通过这个技术可以做到在接口中新增加方法并且不会影响到已经实现了该接口的所有的类!包括jdk1.8新引入的Lambda表达式也是基于这一知识点来实现的!
接口中的static
与此同时,从jdk1.8开始,接口中可以通过static关键字来修饰方法,同样可以对方法进行实现
static void func4(){ System.out.println("this is static func4"); }调用方法也非常的简单,接口.static 方法,例如:
IDemo.func4();大家可以这样理解,接口中的亿华云计算static方法可以作为工具方法来提供给大家进行方便调用!
很赞哦!(1145)
相关文章
- 域名资源有限,好域名更是有限,但机会随时都有,这取决于我们能否抓住机会。一般观点认为,国内域名注册太深,建议优先考虑外国注册人。外国注册人相对诚实,但价格差别很大,从几美元到几十美元不等。域名投资者应抓住机遇,尽早注册国外域名。
- 团队开发程序不再做白工,GitHub开始支持共同作者代码提交
- 从Select引起的Bug聊聊多路复用一
- 关于vue-cli脚手架中webpack配置基础文件详解
- 比较短的域名方便用户记忆和传播,它带来的好处往往会超过其他类型的域名,如果你非要域名短而且还要包含关键词,那么往往会事与愿违,现在这种域名基本上是可遇而不可求的。
- 涨知识,原来可以这样用CSS来追踪用户
- 史上最难的一道Java面试题
- JS在微信、微博、QQ、Safari唤起App的解决方案
- 只要我们做的是从目前的市场情况选择域名,从简单易记,从个性特征上,我们就可以找到一个好域名进行注册。域名注册进行域名记录和解析以及绑定网站后,客户可以通过URL登录您的网站。
- 别黑JavaScript了,它真的又“老”又潮