1. 程式人生 > >Java 8新特性之接口改善(八惡人-1)

Java 8新特性之接口改善(八惡人-1)

1.8 我想 when 直接 有一個 圖片 class java類 聖誕節

技術分享圖片

Daisy Donergue 多莫歌·黛西

“By woman, you mean her?” 她也能叫女人?

  Java 8在13年9月發布,寫這篇博文的時間已經是17年12月份了。來的有點晚,但是有必要補一下1.8的特性。

  一、基本介紹

  Java 8中接口裏已經完全可以定義靜態方法了. 舉一個比較普遍的例子就是在java類庫中, 對於一些接口如Foo, 都會有一個有靜態方法的工具類Foos 來生成或者配合Foo對象實例來使用. 既然靜態方法可以存在於接口當中, 那麽大多數情況下 Foos工具類完全可以使用接口中的公共方法來代理 (或者將Foos置成package-private).

  上邊的話理解起來就是接口中可以使用default關鍵字來修飾接口中的方法,打破了接口中不能寫方法實現的弊端,也對原來的概念有了極大的沖擊,因為之前一直在講:“接口中不能有方法的實現”,but not now。所以現在更容易混淆的概念是:可以寫方法實現可以多繼承的接口,可以寫方法實現但只能單繼承的抽象類。所以再被問起接口中是否可以寫實現,你回答的就能直接體現出你是否了解過1.8。代碼如下:

interface Formula { //接口中實現了sqrt的默認算法,只需要使用 default關鍵字即可,在實現類中只需要實現calculate方法即可使用calculate和sqrt兩個方法
    double calculate(int a);
    default double sqrt(int a) {
        return Math.sqrt(a);
    }
}

  在過去,java類庫的接口中添加方法基本上是不可能的. 在接口中添加方法意味著破壞了實現了這個接口的代碼。彌補了Java一直以來不支持多繼承,但支持多繼承的接口不能寫方法實現的缺點。但是現在, 只要能夠提供一個正確明智的默認的方法的實現, java類庫的維護者就可以在接口中添加方法。

  二、具體使用中的問題

  1、接口多繼承情況下,同時繼承的兩個或多個接口中有同樣的方法進行的實現,那麽實現類中怎麽不沖突?在不指明實現類方法指向的是繼承自哪個接口的情況下,編譯時會直接報錯。所以解決方案就是,

    ①在實現類中指明使用了哪個父接口的方法,

    ②實現類中重寫方法

  2、同時繼承了接口和基類,而接口和基類中的同名方法都進行了實現,如何避免沖突?

    當同時繼承了接口和基類,方法沖突時。實現類默認繼承基類中的方法,也就是說基類優先級比接口高。當然也可以選擇重寫。

技術分享圖片

“You John Ruth The Hangman” 絞刑者魯斯·約翰

“When the Hangman catches you, you hang.”當被絞刑者抓住了,你肯定會被絞死

技術分享圖片

 Mannix‘s Marauders -Chris Mannix 曼尼克斯掠奪者 曼尼克斯·克裏斯

“I‘m the new sheriff of Red Rock.” “我是紅石鎮的新任警長”

技術分享圖片

Oswaldo Mobray 莫博瑞·奧斯瓦爾多

“I‘m Oswaldo Mobray, the hangman in these parts.” “我是莫博瑞·奧斯瓦爾多,這片地區的絞刑官。”

技術分享圖片

  Joe Gage 蓋奇·喬

“First time in my life I made a pretty penny.And, figured I‘d come home and spend time with my mothr for Christmas.”

“有生以來第一次掙了很多錢,於是,我想回家陪陪我媽一起過聖誕節”

技術分享圖片

"General" 我是個將軍

“ You, sir a hyena. I hava no wish to speak to you.” “你就是一個土狗,你不配跟我說話”

技術分享圖片

Jody Domingre 多莫歌·喬迪

“How you doing, dummy?” 你還好嗎,傻瓜

參考鏈接:

http://www.oschina.net/translate/everything-about-java-8

https://www.cnblogs.com/zhouxuanyu/p/4536514.html

圖片來源:八惡人(movie)

Java 8新特性之接口改善(八惡人-1)