一 JDK1 8 介面支援靜態方法和預設方法

2021-09-13 21:44:11 字數 1343 閱讀 3234

預設方法主要優勢:

1、提供了一種擴充套件介面的方法,而不破壞現有**。

如果乙個已經投入使用的介面需要擴充套件乙個新的方法,在jdk8以前,我們必須再該介面的所有實現類中都新增該方法的實現,否則編譯會出錯。如果實現類數量很少且我們有修改的許可權,可能工作量會少,但是如果實現類很多或者我們沒有修改**的許可權,這樣的話就很難解決了。而預設方法提供了乙個實現,當沒有顯式提供時就預設採用這個實現,這樣新新增的介面就不會破壞現有的**。

2、預設方法另乙個優勢是該方法是可選的,子類可以根據不同的需求而且經override或者採用預設實現。

1、介面預設方法、靜態方法可以有多個。

2、預設方法通過例項呼叫,靜態方法通過介面名呼叫。

3、default預設方法關鍵字只能用在介面中。

4、預設方法可以被繼承,如果繼承了多個介面,多個介面都定義了多個同樣的預設方法,實現類需要重寫預設方法不然會報錯。

5、靜態方法不能被繼承及覆蓋,所以只被具體所在的介面呼叫。

public inte***ce inte***cejdk8 

/*jdk1.8 靜態方法:

允許在已有的介面中新增靜態方法,介面的靜態方法屬於介面本身,不被繼承,也需要提供方法的現。

*/public static void staticmethod(string str)

}

public class inte***cejdk8impl implements inte***cejdk8 

public static void main(string args)

}// inte***cejdk8 :我是靜態方法

// inte***cejdk8 :我是預設方法

public class inte***cejdk8impl implements inte***cejdk8 

@override

public void defaulemethod(string str)

public static void main(string args)

}// inte***cejdk8 :我是靜態方法

// inte***cejdk8impl :我是預設方法

若乙個介面中定義了乙個預設方法,而另外乙個父類或介面中 又定義了乙個同名的方法時  選擇父類中的方法。如果乙個父類提供了具體的實現,那麼 介面中具有相同名稱和引數的預設方法會被忽略。 

介面衝突:如果乙個父介面提供乙個預設方法,而另乙個接 口也提供了乙個具有相同名稱和引數列表的方法(不管方法 是否是預設方法),那麼必須覆蓋該方法來解決衝突

JDK1 8介面新增

1 預設方法 即被default關鍵字修飾的方法 public class demo01 介面 inte cea 實現類 class demo implements a 構成重寫 public void dsiplay 使用 通過實現類物件使用,實現類可以對預設方法進行重寫,呼叫重寫後的方法 注 只...

Java面試 JDK1 8介面和抽象類

前言 介面是對動作的抽象,抽象類是對根源抽象。使用抽象類,也就是繼承,是一種強耦合的設計,用來描述 a is a b 的關係,即如果說a繼承於b,那麼在流程中將a當做b去使用應該完全沒有問題。介面設計目的就是對類的行為進行約束,也就是提供一種機制,可以強制要求不同的類具有相同的行為。它只約束了行為的...

Java學習之 JDK1 8介面定義增強

一 介面定義加強 1 jdk1.8之前已有的功能彙總 1.inte ce修飾 2.定義常量,抽象方法 3.介面可以繼承多個介面 抽象類可以實現介面 介面不能繼承抽象類 4.子類可以實現多個介面 5.介面是物件導向三大特性中多型的體現 定義標準,表達能力,在分布式開發中暴露遠端服務方法 2 jdk1....