1. 程式人生 > 其它 >java中有兩個相同方法會報錯嗎_Java中容易被遺忘的default關鍵字

java中有兩個相同方法會報錯嗎_Java中容易被遺忘的default關鍵字

技術標籤:java中有兩個相同方法會報錯嗎

更多內容,歡迎關注微信公眾號:全菜工程師小輝~

default關鍵字

default關鍵字在JDK8中有兩個用處。

1. 在switch語句的時候使用default

int day = 8;String dayString;switch (day) { case 1: dayString = "Monday"; break; case 2: dayString = "Tuesday"; break; case 3: dayString = "Wednesday"; break; case 4: dayString = "Thursday"; break; case 5: dayString = "Friday"; break; case 6: dayString = "Saturday"; break; //如果case沒有匹配的值,那麼肯定是星期日 default: dayString = "Sunday"; break;}System.out.println(dayString);

當case裡的值與switch裡的key沒有匹配的時候,執行default裡的方法。

2. 在定義介面的時候使用default來修飾具體的方法

interface IntefercaeDemo { //具體方法 default void showDefault(){ System.out.println("this is showDefault method"); } //具體方法 static void showStatic(){ System.out.println("this is showStatic method"); } //沒有實現的抽象方法 void sayHi();}class LearnDefault implements IntefercaeDemo{ //實現抽象方法 @Override public void sayHi() { System.out.println("this is sayHi mehtod"); } public static void main(String[] args) { //介面中被static所修飾的具體方法 IntefercaeDemo.showStatic(); //將實現了IntefercaeDemo的類例項化 LearnDefault learnDefault = new LearnDefault(); //被Default所修飾的具體方法可以通過引用變數來呼叫 learnDefault.showDefault(); }}

JDK8中為了加強介面的能力,使得介面可以存在具體的方法,前提是方法需要被default或static關鍵字所修飾。這樣做的好處是介面的每個實現類如果都想要相同的功能,就不需要重複程式碼,而是在介面進行定義即可。預設方法在子類也可以被重寫。

另外子類重寫的時候,記得synchronized標記的父類函式,子類重寫也必須要帶synchronized關鍵字。更多有關synchronized的知識,詳解Java多執行緒鎖之synchronized

FAQ

如果一個類實現了兩個介面,這兩個介面又同時都包含了一個名字相同的default方法,那麼會發生什麼情況?

在這樣的情況下,編譯器是會報錯,得到一個編譯器錯誤,因為編譯器不知道應該在兩個同名的default方法中選擇哪一個,因此產生了二義性。

default作為訪問限制符

在成員函式定義時,沒有加訪問限制符的函式,其訪問等級為default

public class Demo{ // 沒有訪問修飾符修飾,訪問限制等級為default String name; void show(){}}

來回顧下Java中訪問限制符的對比:

f8a63a5f3aba814e929f5ec7c98f5a78.png

更多內容,歡迎關注微信公眾號:全菜工程師小輝~