017 インターフェイス(インターフェイスの拡張) 012 解答例

// 既存のインターフェイス BaseInterface
interface BaseInterface {
    void existingMethod();
}

// 新しいインターフェイス ExtendedInterface
interface ExtendedInterface extends BaseInterface {
    // 新しいメソッドの宣言
    void newMethod();
}

// インターフェイスを実装するクラス
class MyClass implements ExtendedInterface {
    // BaseInterface のメソッドの実装
    @Override
    public void existingMethod() {
        System.out.println("Existing Method implementation");
    }

    // ExtendedInterface の新しいメソッドの実装
    @Override
    public void newMethod() {
        System.out.println("New Method implementation");
    }
}

// メインクラス
public class Main {
    public static void main(String[] args) {
        // インターフェースを実装したクラスのインスタンスを作成
        MyClass myObject = new MyClass();

        // BaseInterface のメソッドを呼び出し
        myObject.existingMethod();

        // ExtendedInterface の新しいメソッドを呼び出し
        myObject.newMethod();
    }
}

この例では、BaseInterface には既存のメソッドがあり、ExtendedInterfaceBaseInterface を拡張して新しいメソッドを追加しています。MyClass クラスは ExtendedInterface を実装し、両方のメソッドを実装しています。最終的に、Main クラスでインスタンスを作成してメソッドを呼び出しています。

インターフェイスの拡張

インターフェースの拡張は、既存のインターフェースに新しいメソッドや抽象メソッドを追加することを指します。これにより、既存のインターフェースを拡張した新しいインターフェースが作成されます。以下に、インターフェースの拡張に関するいくつかの重要なポイントを示します。

  1. 新しいメソッドの追加:
    • インターフェースの拡張では、新しいメソッドを追加できます。
    • これにより、既存のクラスや他のインターフェースが新しいメソッドを実装する必要が生じます。
  2. extends キーワードの使用:
    • インターフェースが他のインターフェースを拡張する場合、extends キーワードを使用します。
    • 例: interface ExtendedInterface extends BaseInterface { ... }
  3. 複数のインターフェースの拡張:
    • 1つのインターフェースが複数のインターフェースを拡張できます。
    • 例: interface ExtendedInterface extends InterfaceA, InterfaceB { ... }
  4. 既存のクラスへの影響:
    • 既存のクラスが拡張された新しいインターフェースを実装する場合、新しいメソッドを実装する必要があります。
    • 既存のクラスがこれを行わない場合、抽象クラスを使用するなどの対策が必要です。

以下は、新しいメソッドを追加した拡張インターフェースの例です。

// 既存のインターフェース
interface BaseInterface {
    void existingMethod();
}

// 拡張した新しいインターフェース
interface ExtendedInterface extends BaseInterface {
    // 新しいメソッドの宣言
    void newMethod();
}

// インターフェースを実装するクラス
class MyClass implements ExtendedInterface {
    // BaseInterface のメソッドの実装
    @Override
    public void existingMethod() {
        System.out.println("Existing Method implementation");
    }

    // ExtendedInterface の新しいメソッドの実装
    @Override
    public void newMethod() {
        System.out.println("New Method implementation");
    }
}

// メインクラス
public class Main {
    public static void main(String[] args) {
        // インターフェースを実装したクラスのインスタンスを作成
        MyClass myObject = new MyClass();

        // BaseInterface のメソッドを呼び出し
        myObject.existingMethod();

        // ExtendedInterface の新しいメソッドを呼び出し
        myObject.newMethod();
    }
}

この例では、ExtendedInterfaceBaseInterface を拡張し、新しいメソッド newMethod を追加しています。MyClass クラスは ExtendedInterface を実装し、両方のメソッドを実装しています。

「拡張」と「継承」の違いは?

「拡張」(extends)と「継承」は、Javaにおいて同じ意味を指します。Javaでは「拡張」(extends)が正確な用語であり、一般的に「継承」としても知られています。以下にその違いを明確にしましょう:

拡張(extends):

Javaにおいて、クラスが他のクラスを拡張するためのキーワードとして「extends」が使用されます。
クラスが別のクラスを拡張すると、親クラスのフィールドとメソッドを継承します。

class ChildClass extends ParentClass {
    // ChildClassはParentClassを拡張しています
}


継承:

一般的なプログラミングの文脈で「継承」という用語が使われることがありますが、Javaの文脈では主に「拡張」(extends)が使われます。
一般的には、クラスが他のクラスの特性を引き継ぐプロセスを指します。
したがって、Javaにおいては「拡張」が正確な用語であり、「継承」と同義として使用されます。他のプログラミング言語では「継承」が用いられることがありますが、Javaでは公式には「extends」が使用されます。

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