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...