Java8インターフェイスのデフォルトメソッド
デフォルトの方法は何ですか、そしてなぜデフォルトの方法があるのですか?
簡単に言えば、インターフェイスには実装方法があり、そのメソッドを実装するためにクラスを実装する必要はありません。メソッド名の前にデフォルトのキーワードを追加するだけです。
なぜこの機能が必要なのですか?まず第一に、以前のインターフェイスは両刃の剣でした。利点は、具体的なプログラミングではなく抽象的なを目的としていることでした。欠点は、インターフェイスを変更する必要がある場合、インターフェイスを実装したすべてのクラスを変更する必要があることでした。 Java 8以前の現在のコレクションフレームワークには、Foreachメソッドがありませんでした。考えることができるソリューションは、JDKの関連インターフェイスに新しい方法と実装を追加することです。ただし、公開されたバージョンの場合、既存の実装に影響を与えることなく、インターフェイスに新しいメソッドを追加することは不可能です。したがって、デフォルトの方法が導入されました。彼らの目的は、既存の実装と互換性のないインターフェイスを導入しないようにすることです。
以下に示すように、
public interface animal {default void eat(){system.out.println( "Animal Eat Default Method"); }}インターフェイスが宣言されており、内部にはデフォルトメソッドが1つだけです。次に、特定のクラスを書き、このインターフェイスを実装します。
パブリッククラスの犬は動物を実装します{public void sayhi(){system.out.println( "dog"); } public static void main(string args []){dog dog = new Dog(); dog.eat(); }}特定のクラスでは、デフォルトの方法をオーバーライドする必要はありませんが、抽象的なメソッドを実装する必要があります。
デフォルトメソッドの複数の継承
以下に示すコード、
パブリックインターフェイスa {void dosomething();デフォルトのvoid hello(){system.out.println( "インターフェイスA"); }デフォルトvoid foo(){system.out.println( "foo from interface a"); }} interface bはa {default void hello(){system.out.println( "hello world from interface b"); a.super.hello(); this.foo(); a.super.foo(); }} class Cはb、a {@override public void dosomething(){system.out.println( "c object need do something"); } public static void main(string args []){a obj = new c(); obj.hello(); // bのメソッドを呼び出してくださいobj.dosomething(); }}印刷結果:
インターフェイスからのHelloWorldインターフェースのbhello World from interface afoo from interface ac objec
obj.hello()は、インターフェイスBのデフォルトメソッドを呼び出します。同時に、インターフェイスBのデフォルトメソッドは、親インターフェイスのデフォルトメソッドを呼び出します。
以下に示すように、別の例を見て、複数の継承で同じ名前のデフォルトのメソッドについて考えてみましょう。
パブリックインターフェイスd {デフォルトのvoid hello(){system.out.println( "hello world from d"); }} interface e {default void hello(){system.out.println( "hello world from e"); }} class f実装d、e {@override public void hello(){system.out.println( "hello world f class"); d.super.hello(); e.super.hello(); } public static void main(string args []){f f = new f(); f.hello(); }}次のように呼び出すインターフェイスのデフォルトの方法を策定する必要があります。
d.super.hello(); e.super.hello();
Java8のデフォルトメソッドの別の例:
Java8には、インターフェイスにデフォルトのメソッドが追加されています。つまり、インターフェイスに実装できることを意味します。この実装方法はデフォルトの実装であり、インターフェイス実装クラスでこのデフォルトメソッドを書き換えることもできます。
次の例:
public class appinterfacedefaultmethod {public static interface defaultmethoddemo {//デフォルトのメソッドを定義します。デフォルトのキーワードはデフォルトメソッドの前に、次にメソッド宣言とメソッドボディのデフォルトvoid demo(string input){system.out.println(input); } void dosomething(); } public static classデモクラスはdefaultmethoddemo {@override public void dosomething(){system.out.println( "do montse"); }} public static class democlassoverridedemoはdefaultmethoddemo {//デフォルトメソッド@Override public void demo(string input){system.out.println( "demo" + input + "by override method"); } @Override public void dosomething(){system.out.println( "do monthe"); }} public static void main(string [] args){defaultmethoddemo demo = new democlass(); demo.demo( "abc"); DefaultMethoddemo DemoOverride = new DemoclassoverRideDemo(); demooverride.demo( "abc"); }}上記は、Java8インターフェイスのデフォルトの方法の詳細な紹介であり、すべての人の学習に役立つことを願っています。