JAVA8は長い間リリースされており、java5(2004年にリリース)以来、java8が最も重要なバージョンであることは間違いありません。これらには、言語、コンパイラ、ライブラリ、ツール、およびJVMの新機能が含まれます。Java8の新機能のリストは次のとおりです。
インターフェイスのデフォルトメソッド
機能インターフェイス
ラムダ式
メソッドリファレンス
ストリーム
オプションのクラス
日付
APIBase64
繰り返しアノテーションとタイプアノテーション
01インターフェイスのデフォルトメソッド
1.インターフェイスのデフォルトメソッドとは
Java8以降、プログラムでは、インターフェイスに特定の実装のメソッドを含めることができます。デフォルトの変更を使用します。この種の方法がデフォルトの方法です。インターフェイスに複数のデフォルトメソッドを追加できます。Java8には、対応する多くのインターフェイスデフォルトメソッドが用意されています。
2.インターフェイスのデフォルトメソッドを設計する利点。
インターフェイスプログラミングを使用する利点は、開発が特定指向のプログラミングではなく抽象化に向けられているため、プログラムが非常に柔軟になることです。欠点は、インターフェイスを変更する必要がある場合、この時点ですべての実装を変更する必要があることです。たとえば、Java 8より前のこのインターフェイスのクラスには、一般的に使用されるコレクションフレームワークのforeachメソッドはありません。通常考えられる解決策は、JDKの関連するインターフェイスに新しいメソッドと実装を追加することです。Java8以降、インターフェイスのデフォルトメソッドが導入されました。利点は明らかです。まず、以前のバージョンのJava8の互換性の問題が解決されます。同時に、将来のプログラム開発では、インターフェイスのサブクラスでインターフェイスのデフォルトメソッドを直接使用することもできます。各サブクラスに応答インターフェイスメソッドを実装する必要はなくなりました。
3.デフォルトのメソッド
jdk8では、インターフェイスに実装メソッドを含めることができます。実装メソッドはデフォルトで変更する必要があります。このようなメソッドはデフォルトメソッドと呼ばれます。デフォルトのメソッドは、インターフェイスに実装を提供する必要があり、実装クラスでオンデマンドでオーバーライドできます。デフォルトのメソッドは、実装クラスまたは実装クラスオブジェクトを介してのみ呼び出すことができます。注:同じデフォルトメソッドが複数の親インターフェイスに存在する場合、子クラスは近接の原則に従って継承します。
パブリックインターフェイスIMathOperation {
/ **
- メソッドパラメータをサポートするためのインターフェイスデフォルトメソッドの定義
* /
default void print(){
System.out.println( "これは数値演算の基本インターフェイスです...");
}
}
4.静的メソッド
静的メソッドは、静的メソッドによって変更されるメソッドです。インターフェイスの静的メソッドページも実装する必要があり、インターフェイスを介してメソッドを直接呼び出す方法を提供します。
パブリックインターフェイスIMathOperation {
/ **
-
メソッドパラメータをサポートするようにインターフェイスのデフォルトメソッドを定義します
* /
default void print(){
System.out.println( "これは数値演算の基本的なインターフェイスです...");
}/ **
- 静的デフォルトメソッドの定義
* /
static void version(){
System.out.println( "これはバージョン1.0の単純な計算機です");
}
}
5.インターフェイスのデフォルトメソッドを
使用してIMathOperationインターフェイスを定義し、デフォルトの印刷メソッドを提供します
パブリックインターフェイスIMathOperation {
/ **
-
メソッドパラメータをサポートするようにインターフェイスのデフォルトメソッドを定義します
* /
default void print(){
System.out.println( "これは数値演算の基本的なインターフェイスです...");
}/ **
- 静的デフォルトメソッドを定義します
* /
static void version(){
System.out.println( "これはバージョン1.0の単純な計算機です");
}
/ ** - 整数加算法
- @param
- @param b
- @return
* /
public int add(int a、int b);
}
サブクラス実装
定義MathOperationImplサブクラスはIMathOperationインターフェイスを実装します
ここに表示されているように、IMathOperationインターフェイスを実装するときに、インターフェイスのデフォルトのメソッドを実装することを選択できます(または、実装しない場合は、サブクラスメソッドで直接使用します)。
public classMathOperationImplはIMathOperationを実装します{ br /> @ Override
public int add(int a、int b){
//サブクラスは親クラスインターフェイスのデフォルトメソッドを直接呼び出すことができます
IMathOperation.super.print();
//親クラスを静的デフォルトを呼び出すメソッド
IMathOperation.version();
return a + b;
}
}
02複数のデフォルトメソッドの場合Java8を
使用してアプリケーションを開発します。サブクラスが複数のインターフェイスを実装する場合、インターフェイスのデフォルトメソッド定義とインターフェイスに複数のデフォルトメソッドが存在する場合があります。デフォルトのメソッドは同じ名前である可能性があります。現時点では、サブクラスを実装または呼び出すときは、通常、次の3つの原則に従います。
1.クラス内のメソッドの優先度が最も高い
2.最初の項目を判断できない場合は、サブインターフェイスの優先度が高くなります。関数の署名が同じ場合、デフォルトのメソッドが最も具体的に実装されているインターフェイスが優先されます。つまり、BがAを継承する場合、BはAよりも具体的です。
3.それでも判断できない場合は、複数のインターフェースを継承するクラスがオーバーライドを表示して目的のメソッドを呼び出し、使用するデフォルトのメソッドを明示的に選択する必要があります。
サンプルコードは次のとおりです。
/ **
- 電話インターフェースを定義し、デフォルトの情報メソッドを提供します
* /
public interface Phone {
default void info(){
System.out.println( "This is a phone");
}
}
/ ** - MiPhoneサブインターフェイスを定義し、Phoneの親インターフェイスを継承し、infoメソッドも提供します
* /
public interface MiPhone extends Phone {
default void info(){
System.out.println( "This is Xiaomi phone");
}
}
/ ** - PhoneMiPhoneインターフェースを実装する
* /
public class M2sPhoneimplements Phone、MiPhone {
public static void main(String [] args){
new M2sPhone()。info();
}
}
印刷結果:
これはXiaomi電話です
jdk8は長い間リリースされており、java5(2004年にリリース)以来、java8が最も重要なバージョンであることは間違いありません。これらには、言語、コンパイラ、ライブラリ、ツール、およびJVMの新機能が含まれます。