Java8-default-methods

提供:Dev Guides
移動先:案内検索

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

Java 8では、インターフェイスにデフォルトのメソッド実装という新しい概念が導入されています。 この機能は下位互換性のために追加されているため、古いインターフェイスを使用してJava 8のラムダ式機能を活用できます。

たとえば、「リスト」または「コレクション」インターフェースには「forEach」メソッド宣言がありません。 したがって、このようなメソッドを追加すると、コレクションフレームワークの実装が単純に破壊されます。 Java 8ではデフォルトのメソッドが導入されているため、List/CollectionインターフェースはforEachメソッドのデフォルトの実装を持つことができ、これらのインターフェースを実装するクラスは同じものを実装する必要はありません。

構文

public interface vehicle {

   default void print() {
      System.out.println("I am a vehicle!");
   }
}

複数のデフォルト

インターフェイスのデフォルト関数では、クラスが同じデフォルトメソッドを持つ2つのインターフェイスを実装している可能性があります。 次のコードは、このあいまいさを解決する方法を説明しています。

public interface vehicle {

   default void print() {
      System.out.println("I am a vehicle!");
   }
}

public interface fourWheeler {

   default void print() {
      System.out.println("I am a four wheeler!");
   }
}

最初の解決策は、デフォルトの実装をオーバーライドする独自のメソッドを作成することです。

public class car implements vehicle, fourWheeler {

   public void print() {
      System.out.println("I am a four wheeler car vehicle!");
   }
}

2番目の解決策は、superを使用して指定されたインターフェイスのデフォルトメソッドを呼び出すことです。

public class car implements vehicle, fourWheeler {

   default void print() {
      vehicle.super.print();
   }
}

静的デフォルトメソッド

インターフェイスには、Java 8以降の静的ヘルパーメソッドを含めることもできます。

public interface vehicle {

   default void print() {
      System.out.println("I am a vehicle!");
   }

   static void blowHorn() {
      System.out.println("Blowing horn!!!");
   }
}

デフォルトのメソッドの例

C:\> JAVAなどで選択した任意のエディターを使用して、次のJavaプログラムを作成します。

Java8Tester.java

public class Java8Tester {

   public static void main(String args[]) {
      Vehicle vehicle = new Car();
      vehicle.print();
   }
}

interface Vehicle {

   default void print() {
      System.out.println("I am a vehicle!");
   }

   static void blowHorn() {
      System.out.println("Blowing horn!!!");
   }
}

interface FourWheeler {

   default void print() {
      System.out.println("I am a four wheeler!");
   }
}

class Car implements Vehicle, FourWheeler {

   public void print() {
      Vehicle.super.print();
      FourWheeler.super.print();
      Vehicle.blowHorn();
      System.out.println("I am a car!");
   }
}

結果を確認する

次のように javac コンパイラを使用してクラスをコンパイルします-

C:\JAVA>javac Java8Tester.java

次のようにJava8Testerを実行します-

C:\JAVA>java Java8Tester

それは次の出力を生成する必要があります-

I am a vehicle!
I am a four wheeler!
Blowing horn!!!
I am a car!