017 インターフェイス(デフォルトメソッドと静的メソッド) 009 解答例

// 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();      // 通常のメソッドの呼び出し
    }
}

これらのメソッドは、実装するクラスによってオーバーライドされることはありません。インターフェースの外部から呼び出される場合は、インターフェース名.メソッド名() の形式で呼び出します。デフォルトメソッドと静的メソッドは、コードの再利用性と拡張性を向上させるための便利な機能です。

「017 インターフェイス」問題集リスト