Javaのインターフェースは複数のインターフェースを継承(拡張)できる?extendsキーワードの使い方を徹底解説
Javaのインターフェースとは
Javaのインターフェースはクラスとよく似ていますが、含められるのが抽象メソッドと、finalかつstaticなフィールドのみであるという点が大きく異なります。そして、クラスの場合と同じように、extendsキーワードを使用することで、あるインターフェースを別のインターフェースから継承(拡張)することが可能です。以下は、1つのインターフェースを別のインターフェースが継承する基本的な例です。
interface ArithmeticCalculations {
public abstract int addition(int a, int b);
public abstract int subtraction(int a, int b);
}
interface MathCalculations extends ArithmeticCalculations {
public abstract double squareRoot(int a);
public abstract double powerOf(int a, int b);
}
複数のインターフェースを同時に継承する方法
さらに重要なポイントとして、extendsキーワードの後ろにインターフェース名をカンマ(,)で区切って記述すれば、1つのインターフェースから複数のインターフェースを同時に継承できます。
interface MyInterface extends ArithmeticCalculations, MathCalculations {
Javaのクラスは多重継承が許されていませんが、インターフェース同士の継承であれば複数の親を持てるため、複数の機能仕様を1つのインターフェースにまとめることができます。これはインターフェース設計において非常に強力な特徴です。
サンプルプログラム
以下は、1つのインターフェース(MyInterface)が複数のインターフェース(ArithmeticCalculations と MathCalculations)を継承し、それを実装クラスで実装する方法を示した完全なJavaプログラムです。
import java.util.Scanner;
interface ArithmeticCalculations {
public abstract int addition(int a, int b);
public abstract int subtraction(int a, int b);
}
interface MathCalculations {
public abstract double squareRoot(int a);
public abstract double powerOf(int a, int b);
}
interface MyInterface extends MathCalculations, ArithmeticCalculations {
public void displayResults();
}
public class ExtendingInterfaceExample implements MyInterface {
public int addition(int a, int b) {
return a+b;
}
public int subtraction(int a, int b) {
return a-b;
}
public double squareRoot(int a) {
return Math.sqrt(a);
}
public double powerOf(int a, int b) {
return Math.pow(a, b);
}
public void displayResults() {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the value of a: ");
int a = sc.nextInt();
System.out.println("Enter the value of b: ");
int b = sc.nextInt();
ExtendingInterfaceExample obj = new ExtendingInterfaceExample();
System.out.println("Result of addition: "+obj.addition(a, b));
System.out.println("Result of subtraction: "+obj.subtraction(a, b));
System.out.println("Square root of "+a+" is: "+obj.squareRoot(a));
System.out.println(a+"^"+b+" value is: "+obj.powerOf(a, b));
}
public static void main(String args[]) {
new ExtendingInterfaceExample().displayResults();
}
}
実行結果
このプログラムを実行し、aに「4」、bに「3」を入力すると、以下のような結果が出力されます。
Enter the value of a: 4 Enter the value of b: 3 Result of addition: 7 Result of subtraction: 1 Square root of 4 is: 2.0 4^3 value is: 64.0
実装クラスの ExtendingInterfaceExample は、継承元である2つのインターフェースが持つすべての抽象メソッド(addition・subtraction・squareRoot・powerOf)に加え、MyInterface自身の displayResults も実装しています。このように、インターフェースを継承してまとめた場合、実装クラスは継承チェーン全体の抽象メソッドをすべて実装する必要がある点に注意しましょう。
まとめ
- Javaのインターフェースは、
extendsキーワードを使って他のインターフェースを継承できます。 - 継承するインターフェースをカンマ(,)で区切れば、複数のインターフェースを同時に継承(多重継承)することも可能です。
- クラスは単一継承しかできませんが、インターフェースは複数継承できるため、柔軟な設計が可能になります。
- 実装クラスは、継承されたすべての抽象メソッドを実装しなければなりません。
-
Javaの列挙型(enum)は任意のクラスを拡張できる?継承の仕組みを解説
Javaの列挙型(enum)とは列挙型(enum)は、Javaにおいて定数の集合を格納するためのデータ型です。1週間の曜日や1年の月名など、固定された値のグループを扱う際に活用されます。列挙型を定義するには、enumキーワードの後に列挙型の名前を続けて記述します。enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }配列と同様に、列挙型内の要素(定数)には0から始まる番号が自動的に割り当てられます。上記の例では、各曜日が以下の図のように番号で識別されます。列挙型はクラスとよく似た構造を持ち
-
JavaのFocusListenerインターフェースとは?重要性と実装方法を解説
FocusListenerインターフェースとはJava AWT/SwingにおけるFocusListenerは、コンポーネントがキーボードフォーカスを取得・喪失したタイミングで発生するイベントを受け取るためのリスナーインターフェースです。ユーザーがどのコンポーネントを操作しているのかを検知できるため、入力フォームのバリデーションやガイド表示など、対話的なUIを実現するうえで重要な役割を担います。フォーカスイベントは、コンポーネントがキーボードフォーカスを取得または喪失したときに生成されます。フォーカスイベントを表すオブジェクトは、FocusEventクラスから作成されます。FocusEvent