Java 8 では、古いインターフェイスによるラムダ式を制御する下位互換性を実現するために、デフォルト メソッドという新しい概念が導入されました。さらに、インターフェイスは、インターフェイスが実装されるクラスに問題を引き起こすことなく、実装された関数を持つことができます。 Java 8 が導入される前は、インターフェイスでは抽象メソッドのみが許可されていました。さらに、関数はさまざまなクラスで提供する必要がありました。次のセクションでは、デフォルトのメソッドの構文、動作、および例について説明します。
無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
構文
以下はデフォルトのメソッドの構文です。
public interface animal { default void sound() { System.out.println("This is a sample default method. . .!"); }}
ご存知のとおり、List やコレクションなどのインターフェイスには forEach メソッドがありません。これを追加すると、コレクションのフレームワーク実装が壊れます。 Java 8ではデフォルトメソッドが導入されたため、forEachメソッドに対してデフォルト実装を行うことができます。それに加えて、同じデフォルト機能を持つ 2 つのインターフェイスを実装するクラスも実行できます。コードのあいまいさがどのように解決されるかを見てみましょう。
public interface livingthings { default void sound() { . . . System.out.println("Living things too make noise . . .") ; } } public interface animals { default void sound() { . . . System.out.println("animals too make noise . . .") ; } }
この曖昧さに対する解決策は 2 つあります。
1. デフォルトのメソッド実装をオーバーライドするには、独自のメソッドを作成します。
public class dogs implements livingthings,animals { default void sound() { . . . System.out.println("dogs bark . . .") ;} }
2. スーパーを使用して、デフォルトのメソッドを呼び出します
public class dogs implements livingthings,animals { default void sound() { . . . livingthings.super.print("dogs bark . . .") ; } }
Java では、通常、1 つのクラスによって n 個のインターフェイスを実装できます。さらに、インターフェイスは別のインターフェイスによって拡張できます。クラスに 2 つのインターフェイスがあり、デフォルトのメソッドが実装されているとします。特定のクラスは、どのメソッドを呼び出すかを選択する際に混乱する可能性があります。これらの競合を解決するには、次の点を実行できます。
A.super.demo() ;
または
B.super.demo() ;
ここで、通常の方法とデフォルトの方法の違いをいくつか見てみましょう
デフォルトメソッドで構成されるインターフェースを拡張する場合、以下を実行できます。
言及されているサンプル プログラムは次のとおりです:
デフォルトメソッドを実装する Java プログラム
コード:
//Java program to implement default method public class DefExample { //main method public static void main(String args[]) { //create an object for the interface animal Animals obj = new Dog(); //call the print method obj.print( ); } } //create an interface animal interface Animals { //default method default void print( ) { System.out.println("I have four legs. . . ! !"); } static void sound() { System.out.println("I used to bark alot!!!") ; } } //create an interface <u>carnivores</u> interface Carnivores { //default method default void print( ) { System.out.println("I eat non veg. . .! !") ; } } //class that implements the other two interfaces class Dog implements Animals, Carnivores { public void print( ) { //call the print method of Animals using super Animals.super.print( ) ; //call the print method of Carnivores using super Carnivores.super.print( ); //call the sound method of Animals Animals.sound(); System.out.println("I am a Dog . . .!"); } }
出力:
説明: このプログラムでは、Animals と Carnivores という 2 つのインターフェースに同じデフォルト メソッド print() があり、これらは super を使用して呼び出されます。
デフォルトメソッドを実装する Java プログラム
コード:
//Java program to implement default method interface Sampleinterface{ // Since this is declared as a default method, this has to be implemented in the implementation classes default void sammethod(){ System.out.println("a default method which is newly added to the program"); } // existing public as well as abstract methods has to be implemented in the implementation classes void oldmethod(String s); } public class DefExample implements Sampleinterface{ // abstract method implementation public void oldmethod(String s){ System.out.println("The string given is: "+ s); } public static void main(String[] args) { DefExample obj = new DefExample(); //call the default method obj.sammethod(); //call the abstract method obj.oldmethod("I am the old method in the program"); } }
出力:
説明: このプログラムには、Sampleinterface インターフェースが存在し、デフォルトのメソッド sammethod() があり、それが呼び出されます。
Java 8 では、古いインターフェイスがラムダ式を制御する下位互換性を実行するために、デフォルト メソッドという新しい概念が提供されています。さらに、インターフェイス引数には、デフォルト メソッドの特定の状態がありません。この記事では、デフォルトのメソッドの構文、動作、例について詳しく説明します。
以上がJavaのデフォルトメソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。