Java プログラミングの領域でクラス コントラクトを設定し、コードの一貫性を保証する場合、Java インターフェイスは不可欠です。これは、実装クラスが実装する必要がある多数のメソッドの概要を示すことで、クラスの設計図として機能します。コードの抽象化、モジュール性、保守性はすべて、開発者がインターフェイスを使用することで実現できます。の Java のさまざまなインターフェイス タイプ についてはこのセクションで説明します。
マーカーインターフェイス
マーカー インターフェイス (タグ インターフェイスとも呼ばれます) は、メソッドが宣言されていないインターフェイスです。簡単に言うと、これらはマーカーとして機能し、マーカー インターフェイスを実装するクラスが特定のプロパティまたは品質を持っていることを示します。 Java ランタイム環境およびその他のツールは、これらの API を利用して追加の機能やデータを提供します。 Serializable、Cloneable、および Remote は、Java のマーカー インターフェイスの一部のインスタンスです。
機能インターフェイス
ラムダ式と関数型プログラミングの改良の一環として、関数型インターフェイスが Java 8 に追加されました。抽象メソッドを 1 つだけ持つインターフェイスは、関数型インターフェイスであると言われます。さらに、デフォルトメソッドと静的メソッドも使用できます。ラムダ式やメソッド参照などの多くの Java 関数型プログラミング機能は、関数型インターフェイスを使用します。 Predicate、Consumer、Function、Supplier は、java.util.function パッケージによって提供される組み込み関数インターフェイスのほんの一部です。
単一抽象メソッド (SAM) インターフェイス
Java 8 より前には、SAM インターフェイスと呼ばれる特定の種類の機能インターフェイスがありました。これらのインターフェイスには、デフォルト メソッドまたは静的メソッドをいくつでも含めることができますが、抽象メソッドは 1 つだけです。 Runnable、Comparator、および MouseListener は、SAM インターフェイスの例を含む Java 8 以前のいくつかの API です。 Java 8 での関数型インターフェイスの導入により、SAM インターフェイスをラムダ式で使用し、関数型インターフェイスとみなすことができます。
ジャワの色
通常のインターフェース
Java で最も一般的な種類のインターフェイスは、通常のインターフェイスです。これらには、インターフェイスを実装するクラスが実装する必要がある 1 つ以上の抽象メソッドがあります。 Java 8 以降では、通常のインターフェースにデフォルトおよび静的メソッドを追加で含めることができます。通常のインターフェイスは、クラスが従わなければならないルールや要件を指定するために開発者によって使用されます。 List、Set、Map はすべて java.util パッケージにあり、典型的な Java インターフェイスの例です。
複数の継承インターフェイス
Java では、クラスが複数のインターフェイスを実装できますが、複数のクラスの継承はサポートされていません。多数のコントラクトを同時に定義したり動作を継承したりするためにクラスによって実装されるインターフェイスは、多重継承インターフェイスと呼ばれます。クラスは、複数のインターフェイスを実装することで、各インターフェイスで概説される機能を提供できます。この機能を利用すると、開発者はコードを再利用し、アイデアの適応性を高めることができます。
Javaの文字列を逆にする
Java の各タイプのインターフェイスのコード例と、対応する出力を次に示します。
マーカーインターフェイス
MarkerInterfaceExample.java
import java.io.Serializable; // Marker Interface interface MyMarkerInterface extends Serializable { } public class MarkerInterfaceExample { public static void main(String[] args) { MyMarkerInterface obj = new MyMarkerInterface() { }; System.out.println(obj instanceof Serializable); // true } }
出力:
true
機能インターフェイス
FunctionalInterfaceExample.java
import java.util.function.Predicate; public class FunctionalInterfaceExample { public static void main(String[] args) { Predicate isLengthGreaterThan5 = str -> str.length() > 5; System.out.println(isLengthGreaterThan5.test('Hello')); // false System.out.println(isLengthGreaterThan5.test('OpenAI')); // true } }
出力:
false true
単一抽象メソッド (SAM) インターフェイス:
SAMInterfaceExample.java
interface MySAMInterface { void performAction(); } public class SAMInterfaceExample { public static void main(String[] args) { MySAMInterface obj = () -> System.out.println('Performing action'); obj.performAction(); // Performing action } }
出力:
私のコンピュータ画面の寸法はどれくらいですか
Performing action
通常のインターフェース
NormalInterfaceExample.java
import java.util.List; import java.util.ArrayList; interface MyInterface { void printMessage(); } class MyClass implements MyInterface { @Override public void printMessage() { System.out.println('Hello, World!'); } } public class NormalInterfaceExample { public static void main(String[] args) { MyInterface obj = new MyClass(); obj.printMessage(); // Hello, World! } }
出力:
ハフマンコーディングコード
Hello, World!
複数の継承インターフェイス:
MultipleInheritanceInterfaceExample.java
interface Interface1 { void method1(); } interface Interface2 { void method2(); } class MyClass implements Interface1, Interface2 { @Override public void method1() { System.out.println('Method 1'); } @Override public void method2() { System.out.println('Method 2'); } } public class MultipleInheritanceInterfaceExample { public static void main(String[] args) { MyClass obj = new MyClass(); obj.method1(); // Method 1 obj.method2(); // Method 2 } }
出力:
Method 1 Method 2
これらの例は、Java のさまざまな種類のインターフェイスの使用法と動作を示しています。各コード スニペットを個別に実行して、対応する出力を観察できます。
結論として、Java インターフェイスは、コントラクトを指定し、コードのモジュール性を実現するための強力な方法を提供します。特定の特性を示すマーカー インターフェイス、関数型プログラミングを可能にする関数型インターフェイス、コントラクトを定義する通常のインターフェイス、または複数のコントラクトを結合する多重継承インターフェイスなど、インターフェイスは Java 開発にとって不可欠です。 Java 開発者は、さまざまなインターフェイスの種類とその機能を認識していれば、明確で拡張可能なコードを構築する能力が高まります。