1. 程式人生 > >Java 8 有多牛逼?打破一切你對介面的認知!

Java 8 有多牛逼?打破一切你對介面的認知!

前段時間面試了一個 39 歲的程式設計師,結果不是很理想,沒看過的[點選這裡](https://mp.weixin.qq.com/s/uzMVaCEp7YtDKjDM8m_kwg)閱讀。 最近也面試一些 Java 程式設計師,不乏工作 4、5 年經驗的,當我問他一些 Java 8 的新特性時,大多卻答不上來。 **比如下面這道題:** **棧長**:接口裡面可以寫方法嗎? **小A**:當然可以啊,預設就是抽象方法。 **棧長**:那接口裡面可以寫實現方法嗎? **小A**:不可以,所有方法必須是抽象的。 **棧長**:你確定嗎? **小A**:確定…… 小A看起來對我的問題有點懷疑人生,心裡肯定估摸著,我不會在給他埋了什麼坑吧。然後他還是仔細再想了一下,最後還是斬釘截鐵的告訴我:**接口裡面只能寫抽象方法,不能寫實現方法**。 **棧長**:接口裡面是可以寫實現方法的,Java 8 開始就可以了,你用過 Java 8 嗎? **小A**:好吧,看來是我學藝不精,Java 8 有了解一點,比如那個 Lambda 表示式,但實際專案中也沒怎麼用。 通過和小A的交流,我也看到了許多開發者的問題,雖然開發版本用的是 Java 8,但實際用的還是 Java 8 之前的最基礎的語法,對 Java 8 新增的特性一無所知。 Java 8 至 2014 年釋出至今,已經過了 6 個年頭了,最新的 Java 14 都發布了,OK,這個不在本篇討論範圍之內, Java 8+ 系列教程請關注公眾號回覆 "java" 進行閱讀,本篇就是想順著問小A的這個問題展開。 ## 什麼是預設方法和靜態方法? 上面也說了,Java 8 開始是可以有方法實現的,可以在介面中新增預設方法和靜態方法。 預設方法用 `default` 修飾,只能用在介面中,靜態方法用 `static` 修飾,這個我們不陌生了。並且介面中的預設方法、靜態方法可以同時有多個。 在介面中寫實現方法一點也不稀奇,像這樣的用法,從 Java 8 到 Java 14 已是遍地開花,到處都可以看到介面預設方法和靜態方法的身影。 比如我們來看下在 JDK API 中 `java.util.Map` 關於介面預設方法和靜態方法的應用。 ``` /* * 來源公眾號:Java技術棧 */ public inter