Java9新特性之——接口中的私有方法

Java9新特性之——接口中的私有方法

前言:Java9的發佈一推再推,下面就讓我們一起來看看Java9有哪些新特性吧!

  • Java7中的接口
  • Java8中的接口
  • Java9中的接口
  • 在接口中定義私有方法
  • 爲什麼我們需要在接口中使用私有方法

Java7中的接口

在Java SE 7或更早版本中,一個接口中只能只能定義如下兩種:

  • 常量
  • 抽象方法

我們不能在接口中提供方法實現。如果我們要提供抽象方法和非抽象方法(方法與實現)的組合,那麼我們就得使用抽象類。

例如:

public interface JavaSeven{
      String TYPE_NAME = "java seven interface";
      int TYPE_AGE = 20;
      String TYPE_DES = "java seven interface description";

      void method01();
      void method02(String arg);
      void method03(String arg1,int arg2);
      String method04();
   }

這裏我們定義了一些常量和公共抽象方法。如果我們想在這裏提供這些方法的實現,如何解決這個問題呢?我們應該使用抽象類來解決Java SE 7中的上述情況。

Java8中的接口

在Java SE 8 Release中Java接口引入了一些新功能——默認方法靜態方法。我們可以在Java SE 8的接口中編寫方法實現,僅僅需要使用“default”關鍵字來定義它們。

在Java SE 8中,一個接口中能定義如下幾種:

  • 常量
  • 抽象方法
  • 默認方法
  • 靜態方法

例如:

public interface JavaEight{
      String TYPE_NAME = "java seven interface";
      int TYPE_AGE = 20;
      String TYPE_DES = "java seven interface description";

      default void method01(String msg){
         //TODO
      }
      default void method02(){
         //TODO
      }

      // Any other abstract methods
      void method03();
      void method04(String arg);
      ...
      String method05();
   }

這裏我們爲所有方法提供了實現。如果我們觀察上面的代碼,我們覺得有些代碼冗餘。如果要將冗餘代碼提取爲常用方法,那應該使用公共方法。但是,如果API開發人員不想向客戶端公開任何其他方法。我們如何解決這個問題?我們應該使用抽象類來解決Java SE 8中的上述情況。

Java9中的接口

爲了解決上述的問題Java9提供了新的功能——在接口中使用private私有方法。我們可以使用’private’訪問修飾符在接口中編寫私有方法。

在Java SE 8中,一個接口中能定義如下幾種:

  • 常量
  • 抽象方法
  • 默認方法
  • 靜態方法
  • 私有方法
  • 私有靜態方法

例如:

 public interface JavaNine{
      String TYPE_NAME = "java seven interface";
      int TYPE_AGE = 20;
      String TYPE_DES = "java seven interface description";

      default void method01(){
        //TODO
      }
      default void method02(String message){
        //TODO
      }

      private void method(){
         //TODO  
      }

      // Any other abstract methods
      void method03();
      void method04(String arg);
      ...
      String method05();
   }

在這裏,我們將冗餘代碼提取到通用的私有方法中,以便我們的API客戶端無法看到它們。

在接口中定義私有方法

在Interface中編寫私有方法時,我們應該遵循以下規則:

  • 我們應該使用私有修飾符(private)來定義這些方法。
  • 我們不能同時使用私有修飾符(private)和abstract來定義這些方法。
    • “私有”方法意味着完全實現的方法,因爲子類不能繼承並覆蓋此方法。
    • “抽象”方法意味着無實現方法。這裏子類應該繼承並覆蓋此方法。
  • 私有方法必須包含方法體,必須是具體方法。
  • 這些接口私有方法僅在該接口內是有用的或可訪問的。我們無法從接口訪問或繼承私有方法到另一個接口或類。

**總結:**Java9爲我們提供的新功能——在接口中定義私有方法,對我們有很大的幫助,這將減少重複代碼,提高代碼的重用性,同時將私有方法寫在接口中,不讓子類看到,有很好的安全性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章