// 既存のインターフェイス 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
には既存のメソッドがあり、ExtendedInterface
は BaseInterface
を拡張して新しいメソッドを追加しています。MyClass
クラスは ExtendedInterface
を実装し、両方のメソッドを実装しています。最終的に、Main
クラスでインスタンスを作成してメソッドを呼び出しています。
インターフェイスの拡張
インターフェースの拡張は、既存のインターフェースに新しいメソッドや抽象メソッドを追加することを指します。これにより、既存のインターフェースを拡張した新しいインターフェースが作成されます。以下に、インターフェースの拡張に関するいくつかの重要なポイントを示します。
- 新しいメソッドの追加:
- インターフェースの拡張では、新しいメソッドを追加できます。
- これにより、既存のクラスや他のインターフェースが新しいメソッドを実装する必要が生じます。
- extends キーワードの使用:
- インターフェースが他のインターフェースを拡張する場合、
extends
キーワードを使用します。 - 例:
interface ExtendedInterface extends BaseInterface { ... }
- インターフェースが他のインターフェースを拡張する場合、
- 複数のインターフェースの拡張:
- 1つのインターフェースが複数のインターフェースを拡張できます。
- 例:
interface ExtendedInterface extends InterfaceA, InterfaceB { ... }
- 既存のクラスへの影響:
- 既存のクラスが拡張された新しいインターフェースを実装する場合、新しいメソッドを実装する必要があります。
- 既存のクラスがこれを行わない場合、抽象クラスを使用するなどの対策が必要です。
以下は、新しいメソッドを追加した拡張インターフェースの例です。
// 既存のインターフェース
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();
}
}
この例では、ExtendedInterface
が BaseInterface
を拡張し、新しいメソッド newMethod
を追加しています。MyClass
クラスは ExtendedInterface
を実装し、両方のメソッドを実装しています。
「拡張」と「継承」の違いは?
「拡張」(extends)と「継承」は、Javaにおいて同じ意味を指します。Javaでは「拡張」(extends)が正確な用語であり、一般的に「継承」としても知られています。以下にその違いを明確にしましょう:
拡張(extends):
Javaにおいて、クラスが他のクラスを拡張するためのキーワードとして「extends」が使用されます。
クラスが別のクラスを拡張すると、親クラスのフィールドとメソッドを継承します。
class ChildClass extends ParentClass {
// ChildClassはParentClassを拡張しています
}
継承:
一般的なプログラミングの文脈で「継承」という用語が使われることがありますが、Javaの文脈では主に「拡張」(extends)が使われます。
一般的には、クラスが他のクラスの特性を引き継ぐプロセスを指します。
したがって、Javaにおいては「拡張」が正確な用語であり、「継承」と同義として使用されます。他のプログラミング言語では「継承」が用いられることがありますが、Javaでは公式には「extends」が使用されます。