Java インターフェース
1. インターフェース(Interfaces)
Javaにおいて抽象化(Abstraction)を実現するもう一つの方法が、インターフェース(Interfaces)です。
インターフェースとは、関連する「ボディ(実装)が空のメソッド」をグループ化するための、完全に「抽象化されたクラス」のことです。
例:
// インターフェース
interface Animal {
public void animalSound(); // インターフェースメソッド(ボディを持ちません)
public void run(); // インターフェースメソッド(ボディを持ちません)
}1.1 インターフェースの実装
インターフェースのメソッドにアクセスするには、別のクラスでインターフェースを「実装(implement)」する必要があります。これには extends ではなく implements キーワードを使用します。インターフェースメソッドの具体的なボディは、この「実装クラス」側で提供されます。
例:
// インターフェース
interface Animal {
public void animalSound(); // インターフェースメソッド(ボディなし)
public void sleep(); // インターフェースメソッド(ボディなし)
}
// PigクラスがAnimalインターフェースを「実装(implements)」する
class Pig implements Animal {
public void animalSound() {
// animalSound() のボディはここで提供される
System.out.println("ブタが鳴きます:ウィーウィー");
}
public void sleep() {
// sleep() のボディはここで提供される
System.out.println("Zzz");
}
}
class Main {
public static void main(String[] args) {
Pig myPig = new Pig(); // Pigオブジェクトを作成
myPig.animalSound();
myPig.sleep();
}
}2. インターフェースに関する注意点
- 抽象クラスと同様に、インターフェースはそれ単体でオブジェクト(インスタンス)を作成することはできません。
- インターフェースメソッドはボディを持ちません。ボディは実装クラスによって提供されます。
- インターフェースを実装する場合、そのインターフェースにあるすべてのメソッドをオーバーライドする必要があります。
- インターフェースメソッドは、デフォルトで
abstractかつpublicです。 - インターフェースのアトリビュート(変数)は、デフォルトで
public、static、かつfinalです。 - インターフェースはオブジェクト作成に使用できないため、コンストラクタを持つことはできません。
3. なぜ、いつインターフェースを使用するのか?
- セキュリティの確保: オブジェクトの特定の詳細を隠蔽し、重要なインターフェース(接点)のみを公開するため。
- 多重継承の実現: Javaは「多重継承(1つのクラスが複数のスーパークラスを継承すること)」をサポートしていません。しかし、クラスは複数のインターフェースを実装できるため、インターフェースを使えば多重継承と同じ効果を得ることができます。
4. 複数のインターフェースの実装
複数のインターフェースを実装するには、それらをカンマ(,)で区切ります。
例:
interface FirstInterface {
public void myMethod(); // インターフェースメソッド
}
interface SecondInterface {
public void myOtherMethod(); // インターフェースメソッド
}
class DemoClass implements FirstInterface, SecondInterface {
public void myMethod() {
System.out.println("何らかのテキスト..");
}
public void myOtherMethod() {
System.out.println("別のテキスト...");
}
}
class Main {
public static void main(String[] args) {
DemoClass myObj = new DemoClass();
myObj.myMethod();
myObj.myOtherMethod();
}
}