溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java8中的默認方法和靜態(tài)方法

發(fā)布時間:2020-07-22 13:55:30 來源:億速云 閱讀:130 作者:小豬 欄目:開發(fā)技術

這篇文章主要講解了Java8中的默認方法和靜態(tài)方法,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

接口中的默認方法

Java 8中允許接口中包含具有具體實現(xiàn)的方法,該方法稱為“默認方法”,默認方法使用 default 關鍵字修飾 。

例如,我們可以定義一個接口MyFunction,其中,包含有一個默認方法getName,如下所示。

public interface MyFunction<T>{
  T get(Long id);
  default String getName(){
    return "binghe";
  }
}

默認方法的原則

在Java8中,默認方法具有“類優(yōu)先”的原則。

若一個接口中定義了一個默認方法,而另外一個父類或接口中又定義了一個同名的方法時,遵循如下的原則。

1.選擇父類中的方法。如果一個父類提供了具體的實現(xiàn),那么接口中具有相同名稱和參數(shù)的默認方法會被忽略。

例如,現(xiàn)在有一個接口為MyFunction,和一個類MyClass,如下所示。

  • MyFunction接口
public interface MyFunction{
  default String getName(){
    return "MyFunction";
  }
}
  • MyClass類
public class MyClass{
  public String getName(){
    return "MyClass";
  }
}

此時,創(chuàng)建SubClass類繼承MyClass類,并實現(xiàn)MyFunction接口,如下所示。

public class SubClass extends MyClass implements MyFunction{
  
}

接下來,我們創(chuàng)建一個SubClassTest類,對SubClass類進行測試,如下所示。

public class SubClassTest{
  @Test
  public void testDefaultFunction(){
    SubClass subClass = new SubClass();
    System.out.println(subClass.getName());
  }
}

運行上述程序,會輸出字符串:MyClass。

2.接口沖突。如果一個父接口提供一個默認方法,而另一個接口也提供了一個具有相同名稱和參數(shù)列表的方法(不管方法是否是默認方法), 那么必須覆蓋該方法來解決沖突。

例如,現(xiàn)在有兩個接口,分別為MyFunction和MyInterface,各自都有一個默認方法getName(),如下所示。

  • MyFunction接口
public interface MyFunction{
  default String getName(){
    return "function";
  }
}
  • MyInterface接口
public interface MyInterface{
  default String getName(){
    return "interface";
  }
}

實現(xiàn)類MyClass同時實現(xiàn)了MyFunction接口和MyInterface接口,由于MyFunction接口和MyInterface接口中都存在getName()默認方法,所以,MyClass必須覆蓋getName()方法來解決沖突,如下所示。

public class MyClass{
  @Override
  public String getName(){
    return MyInterface.super.getName();
  }
}

此時,MyClass類中的getName方法返回的是:interface。

如果MyClass中的getName()方法覆蓋的是MyFunction接口的getName()方法,如下所示。

public class MyClass{
  @Override
  public String getName(){
    return MyFunction.super.getName();
  }
}

此時,MyClass類中的getName方法返回的是:function。

接口中的靜態(tài)方法

在Java8中,接口中允許添加靜態(tài)方法,使用方式接口名.方法名。例如MyFunction接口中定義了靜態(tài)方法send()。

public interface MyFunction{
  default String getName(){
    return "binghe";
  }
  static void send(){
    System.out.println("Send Message...");
  }
}

我們可以直接使用如下方式調用MyFunction接口的send靜態(tài)方法。

MyFunction.send();

最后,附上Java8新特性核心知識圖,祝大家在學習Java8新特性時少走彎路。

Java8中的默認方法和靜態(tài)方法

看完上述內容,是不是對Java8中的默認方法和靜態(tài)方法有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI