java8 介面新特性default,靜態方法

2021-09-22 21:25:19 字數 994 閱讀 1587

1.8中新增的關鍵字,用來修飾介面中的方法。帶有default修飾的方法允許擁有方法體,用以對介面方法提供預設實現。

public

inte***ce

idef

}

對於實現了idef介面的類,在idef中的用default關鍵字修飾的方法是不需要強制實現的。

下面的**是可以編譯通過的。

public

inte***ce

idef;}

class

defimplements

idef

本來,像提供預設實現這樣的功能是應該用抽象類來輔助實現的,比如這樣

public

inte***ce

idef

abstract

class

absdef

implements

idef

}class

defextends

absdef

implements

idef

但是,default語法確實對老**的維護提供了一種優秀的補救方法,因為並不是所有老**都是嚴格按照繼承的套路寫的(當然有些情況下也確實不應該使用繼承)。

比如,iterable新增的foreach方法,在arraylist中就必須通過修改老**來實現。

需要注意的是,「在介面中實現具體業務邏輯」這個做法本身是違背介面的定義的。這會模糊介面與其實現類之間的界限,所以,我個人認為default特性需要慎用。

介面中允許直接定義靜態方法。與default相比,這個特性可以用的更隨意一些,因為這只是把從前寫在「工具類」中的**放到了介面中。況且介面中本來就是可以定義靜態變數的,這只是乙個擴充套件罷了。

public

inte***ce

idef

}

JDK8介面新特性

jdk8中,介面中可以定義靜態的非抽象的方法,直接使用介面名呼叫靜態方法,但是它的實現類的類名或者例項卻不可以呼叫介面中的靜態方法。也可以定義普通的非抽象的方法,普通的非抽象方法要在返回值前加上default,對於普通的非抽象方法必須使用子類的例項來呼叫。如果有多個介面定義了相同的預設方法,實現多個...

java8新特性之介面定義增強

一 介面定義的增強 從jdk1.8開始允許在介面中定義普通方法,使用default和static關鍵字,跟在訪問修飾符之後,兩種的區別是,default定義的普通方法用物件呼叫,static定義的方法用介面名呼叫 inte ce ibook static void study class booki...

Java新特性(二) 介面定義增強

從jdk1.8開始,支援的新特性非常多,並且打破了很多原有的設計方案,其中具有最大變化的就是介面。介面只是乙個方法的宣告,而沒有具體的方法實現,時間一長,許多的支援就會出現問題 量大的問題 實現類則只能覆寫無數次介面中的抽象方法,那麼該介面就將無法繼續使用。但是此操作不屬於標準設計,屬於挽救設計!p...