微信号:dev-news

介绍:软件开发社区热点跟踪

一个关于Java接口的小题目,你能做对吗?

2018-05-17 19:26 开发资讯

在Twitter上看到一个Java小测验,感觉比较有趣。猜猜结果是什么?




题目并不难,主要考查Java 8引入的默认接口方法和Lambda表达式。


我发到朋友圈测试了一下,大部分人做错了。看来Java 8普及率还不够高,虽然Java的最新版本已经是10了。


先来公布答案。 


Bonjour!


在Java 8之前,接口中只能声明抽象方法。Java 8引入了默认接口方法(Default Interface Method),可以提供方法实现。子接口中可以继承默认方法,也可以重新将其声明为抽象方法,还可以提供覆写(override)版本。实现接口时也可以选择直接使用默认版本,或是提供自己的实现。


在实现接口Something时,其实只需要实现execute()方法。这种只有一个抽象方法的接口叫做函数式接口(Functional Interface)。这类接口有很多,最常见的比如像Runnable接口,只有一个run()方法。


另一个知识点就是Java 8引入的Lambda表达式。


Something s = () -> this.speak();


其实是用“() -> this.speak();”实现了Something的抽象方法execute()。


在Java 8之前,要实现这样的功能,语法就比较复杂了:


Something s = new Something() {

    public void execute() {

        TryThis.this.speak();

    }

};


到这里答案就出来了,s.execute() 调用了 TryThis 的 speak() 方法。所以输出是“Bonjour!” 。


你做对了吗?




最后推荐一个Java的课程,扫码订阅可以获得6元返现。



 
开发资讯 更多文章 送几本Java和Go相关的书 推荐左耳朵耗子等专家撰写的几个专栏 刚刚,Java 10 正式发布了 赠书 |《Kafka权威指南》 Chaos Engineering——通过实验树立对分布式系统行为的信心
猜您喜欢 璧说:你所了解的索引知识 老板,别人家已经开始发年终奖了…… 程序员的忧桑:有人向你反馈了一个bug ATM这样“转账”不能撤销,千万不要受骗! Python基础教程3:基础语法