インターフェースの利用

Javaにおける「インターフェースの利用」は、継承およびポリモーフィズムの重要な要素の一つであり、特に多重継承の代替手段として重要な役割を果たします。以下に詳しく説明します。


1. インターフェースとは何か

インターフェース(interface)は、クラスが実装すべきメソッドの契約を定義するもので、メソッドのシグネチャ(戻り値と引数)だけを宣言し、実装は提供しません(Java 8以降はdefaultメソッドやstaticメソッドも定義可能)。

java
public interface Drawable { void draw(); // 抽象メソッド }

このように、インターフェースは抽象的な振る舞いの定義を目的とします。


2. クラスによるインターフェースの実装

クラスはimplementsキーワードを用いてインターフェースを実装します。

java
public class Circle implements Drawable { @Override public void draw() { System.out.println("Circle is drawn."); } }

この例では、CircleクラスがDrawableインターフェースを実装し、drawメソッドを具体的に定義しています。


3. ポリモーフィズムとの関係

インターフェースを利用すると、異なるクラスに共通のインターフェースを実装させて同じ型として扱うことができます。これが**ポリモーフィズム(多態性)**の一例です。

java
public class Rectangle implements Drawable { @Override public void draw() { System.out.println("Rectangle is drawn."); } } public class Main { public static void main(String[] args) { Drawable d1 = new Circle(); Drawable d2 = new Rectangle(); d1.draw(); // Circle is drawn. d2.draw(); // Rectangle is drawn. } }

このように、Drawable型の変数d1d2に、異なるクラスのインスタンスを代入し、それぞれのdraw()メソッドを呼び出すことで、動的なメソッドバインディングが実現されます。


4. インターフェースの多重継承

Javaではクラスの多重継承はサポートされていませんが、インターフェースは複数のインターフェースを同時に実装することが可能です。

java
public interface A { void methodA(); } public interface B { void methodB(); } public class MyClass implements A, B { public void methodA() { System.out.println("A"); } public void methodB() { System.out.println("B"); } }

これにより、柔軟な設計が可能になります。


5. defaultメソッド(Java 8以降)

Java 8からは、インターフェース内でdefault修飾子を使ってメソッドの実装を定義することができます。これは既存のコードとの互換性を保ちながら、インターフェースに機能を追加するために導入されました。

java
public interface Printable { default void print() { System.out.println("Printing..."); } }

まとめ

特徴 説明
メソッドの契約定義 実装はせず、何をすべきかだけを定義
実装クラスはimplements 実際の処理を定義するのはクラス側
ポリモーフィズムを実現 同じインターフェース型で異なる実装を扱える
多重実装が可能 クラスではなく、インターフェースで多重継承を実現
defaultstatic対応 Java 8以降、柔軟性が増加

生成日:2025/05/03