// Calculator インターフェイスの宣言
interface Calculator {
// デフォルトメソッド add の宣言
default int add(int a, int b) {
return a + b;
}
}
// ScientificCalculator インターフェイスの宣言
interface ScientificCalculator {
// デフォルトメソッド squareRoot の宣言
default double squareRoot(double x) {
return Math.sqrt(x);
}
}
// BasicCalculator インターフェイスの宣言
interface BasicCalculator extends Calculator, ScientificCalculator {
// 何も追加の宣言は必要なし
}
// テスト用のクラス
public class Main {
public static void main(String[] args) {
// BasicCalculator インターフェイスの実装を持つオブジェクトを作成
BasicCalculator calculator = new BasicCalculator() {};
// デフォルトメソッド add の使用
int sum = calculator.add(5, 3);
System.out.println("Sum: " + sum);
// デフォルトメソッド squareRoot の使用
double sqrtResult = calculator.squareRoot(25.0);
System.out.println("Square Root: " + sqrtResult);
}
}
この例では、Calculator
インターフェイスに add
メソッドがあり、ScientificCalculator
インターフェイスに squareRoot
メソッドがあります。そして、BasicCalculator
インターフェイスは Calculator
インターフェイスと ScientificCalculator
インターフェイスを継承し、ScientificCalculator
インターフェイスのメソッドを実装します。最後に、Main
クラスで BasicCalculator
インターフェイスの実装を持つオブジェクトを作成し、デフォルトメソッドを使用しています。
デフォルトメソッドと静的メソッド
Java 8以降、インターフェースにデフォルトメソッドと静的メソッドを導入しました。これにより、既存のインターフェイスを変更することなく新しいメソッドを追加できるようになり、さらにインターフェイス内でメソッドの実装を提供できるようになりました。以下に、デフォルトメソッドと静的メソッドについて解説します。
デフォルトメソッド
デフォルトメソッドは、インターフェース内でメソッドの実装を提供する手段です。これにより、既存のインターフェイスを変更せずに新しい機能を追加できます。デフォルトメソッドは default
キーワードを使用して宣言されます。
interface MyInterface {
// デフォルトメソッド
default void myDefaultMethod() {
System.out.println("Default implementation");
}
// 抽象メソッド(通常の抽象メソッドも併用できる)
void regularMethod();
}
class MyClass implements MyInterface {
// MyInterface でのデフォルトメソッドのオーバーライド
@Override
public void regularMethod() {
System.out.println("Regular method implementation");
}
}
public class Main {
public static void main(String[] args) {
MyClass myObject = new MyClass();
myObject.myDefaultMethod(); // デフォルトメソッドの呼び出し
myObject.regularMethod(); // 通常のメソッドの呼び出し
}
}
静的メソッド
静的メソッドは、インターフェースに関連付けられたクラスレベルのユーティリティメソッドを提供するための手段です。これらのメソッドは static
キーワードを使用して宣言されます。
interface MyInterface {
// 静的メソッド
static void myStaticMethod() {
System.out.println("Static method");
}
// 抽象メソッド
void regularMethod();
}
class MyClass implements MyInterface {
// MyInterface での抽象メソッドの実装
@Override
public void regularMethod() {
System.out.println("Regular method implementation");
}
}
public class Main {
public static void main(String[] args) {
MyInterface.myStaticMethod(); // 静的メソッドの呼び出し
MyClass myObject = new MyClass();
myObject.regularMethod(); // 通常のメソッドの呼び出し
}
}
これらのメソッドは、実装するクラスによってオーバーライドされることはありません。インターフェースの外部から呼び出される場合は、インターフェース名.メソッド名()
の形式で呼び出します。デフォルトメソッドと静的メソッドは、コードの再利用性と拡張性を向上させるための便利な機能です。