Javaの8デフォルトの方法
Javaの8新しいデフォルトのインターフェイスメソッド。
簡単に言えば、デフォルトの方法は、インターフェイスメソッドを実装することができ、そのメソッドを実装する実装クラスを必要としないです。
ちょうどメソッドの名前の前に我々は、デフォルトのメソッドを実装するために、デフォルトのキーワードを追加します。
なぜ、この機能は必要がありますか?
インターフェースは諸刃の剣である前に、まず、抽象の利益のためではなく、特定のプログラミング上の欠陥のために、それはあなたがなしのforeachメソッドの前にインターフェイス、インターフェイスを実装するクラス全体を変更する必要、現在のJavaコレクションフレームワーク8を変更する必要がある場合ということです、通常、関連するインターフェイスに新しいメソッドと実装を追加JDKで解決策を考えます。 バージョンがリリースされているしかし、それは同時に、インターフェイスに新しいメソッドを追加すると、既存の実装には影響しませんではありません。 したがって、デフォルトの方法の紹介。 その目的は、既存のインターフェイスの変更や実装が問題と互換性がありません解決することです。
文法
次のようにデフォルトの方法の構文は次のとおりです。
public interface vehicle { default void print(){ System.out.println("我是一辆车!"); } }
複数のデフォルト方法
インターフェイスは、デフォルトのメソッドを持っている、場合を考え、クラスは複数のインタフェースを実装し、これらのインターフェイスは、同じデフォルトの方法を持って、次の例は、このような状況のための回避策を示しています。
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の解決策は、デフォルトのメソッド指定されたインターフェイスを呼び出すためにスーパーを使用することができます。
public class car implements vehicle, fourWheeler { default void print(){ vehicle.super.print(); } }
静的なデフォルトの方法
Javaの8もう一つの特徴は、インタフェースが宣言することができる(およびインプリメンテーションを提供することができる)静的メソッドです。 例えば:
public interface vehicle { default void print(){ System.out.println("我是一辆车!"); } // 静态方法 static void blowHorn(){ System.out.println("按喇叭!!!"); } }
例のデフォルトの方法
私たちはあなたのコード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("我是一辆车!"); } 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("我是一辆汽车!"); } }
上記のスクリプトの実装、出力は次のようになります。
$ javac Java8Tester.java $ java Java8Tester 我是一辆车! 我是一辆四轮车! 按喇叭!!! 我是一辆汽车!