Java 8のデフォルトメソッド

2608 ワード

ここでは、菜鳥チュートリアルJava 8のデフォルトメソッドから抜粋します.
Java 8には、インタフェースのデフォルトメソッドが追加されました.
簡単に言えば、デフォルトの方法は、インタフェースに実装方法があり、実装クラスがその方法を実装する必要がないことです.デフォルトのメソッドは、メソッド名の前にdefaultキーワードを追加するだけで実現できます.
なぜこの特性があるのですか?
まず、以前のインタフェースは両刃の剣で、利点は抽象的で具体的なプログラミングに向いていないことであり、欠陥は、インタフェースを修正する必要がある場合、そのインタフェースを実現するクラスをすべて修正する必要があり、現在のjava 8以前の集合フレームワークにはforeach方法がなく、通常考えられる解決策はJDKに関連するインタフェースに新しい方法と実現を追加することである.しかしながら、パブリッシュされたバージョンでは、インタフェースに新しいメソッドを追加しながら、既存の実装に影響を与えないことはできません.従って導入されたデフォルト手法の目的は,インタフェースの修正が既存の実装と互換性がないという問題を解決することである.
デフォルトのメソッド構文フォーマットは次のとおりです.
public interface Vehicle {
   default void print(){
      System.out.println("     !");
   }
}

1.複数のデフォルトメソッド
1つのインタフェースにはデフォルトメソッドがあり、1つのクラスが複数のインタフェースを実装し、これらのインタフェースには同じデフォルトメソッドがあります.次の例では、この場合の解決方法を説明します.
public interface Vehicle {
   default void print(){
      System.out.println("     !");
   }
}
 
public interface FourWheeler {
   default void print(){
      System.out.println("       !");
   }
}

最初の解決策は、書き換えインタフェースのデフォルトメソッドを上書きするための独自のデフォルトメソッドを作成することです.
public class Car implements Vehicle, FourWheeler {
   default void print(){
      System.out.println("        !");
   }
}

2つ目のソリューションでは、superを使用して、指定したインタフェースのデフォルトメソッドを呼び出すことができます.
public class Car implements Vehicle, FourWheeler {
   public void print(){
      Vehicle.super.print();
   }
}

2.静的デフォルトメソッド
Java 8のもう1つの特性は、インタフェースが静的メソッドを宣言(実装可能)できることです.たとえば、次のようになります.
public interface Vehicle {
   default void print(){
      System.out.println("     !");
   }
    //     
   static void blowHorn(){
      System.out.println("   !!!");
   }
}

3.デフォルトメソッドの例
Java 8 Testerにコードを入れることができるデフォルトの方法の使用については、以下のコードで知ることができます.JAvaファイル:
public class Java8Tester {
   public static void main(String args[]){
      Vehicle vehicle = new Car();
      vehicle.print();
   }
}
 
interface Vehicle {
   default void print(){
      System.out.println("     !");
   }
    
   static void blowHorn(){
      System.out.println("   !!!");
   }
}
 
interface FourWheeler {
   default void print(){
      System.out.println("       !");
   }
}
 
class Car implements Vehicle, FourWheeler {
   public void print(){
      Vehicle.super.print();
      FourWheeler.super.print();
      Vehicle.blowHorn();
      System.out.println("      !");
   }
}

以上のスクリプトを実行して、次の結果を出力します.
     !
       !
   !!!
      !