導入
抽象クラスは「AはBの一種(is-a)」という関係の中で、共通の骨組みを共有する仕組みでした。でも「泳げる」「飛べる」のように、まったく違う種類のクラスに共通の「できること」だけを約束したい 場面もあります。そんなときに使うのが インタフェース です。
説明
インタフェース(interface) は、「このメソッドを持つこと」という約束(契約)だけを定義する型です。中身のあるメソッドは書けません(次のレッスンで学ぶ default メソッドを除く)。クラスがインタフェースの約束を守ることを implements で宣言します。
public class Main {
public static void main(String[] args) {
Fish f = new Fish();
f.swim();
}
}
interface Swimmable {
void swim();
}
class Fish implements Swimmable {
@Override
public void swim() {
System.out.println("泳ぐ");
}
}
interface Swimmable { void swim(); }… 「swim()を持つこと」という約束。class Fish implements Swimmable { ... }…FishはSwimmableの約束を守り、swim()を実装します。インタフェースのメソッドを実装するときは、必ずpublicをつけます。
抽象クラスとの違いは、インタフェースは「継承関係にない、まったく別のクラス同士」にも共通の「できること」を持たせられる点です。
やってみよう
下のエディタを実行し、Fish が Swimmable の約束通り swim() を実装していることを確認しましょう。Swimmable を実装する別のクラス(Human など)を追加してみてください。
演習
interface Flyable { void fly(); } を作り、Bird implements Flyable で fly() を "飛ぶ" と表示するように実装してください。main で new Bird() を作って fly() を呼んでください。
ヒント1を見る
interface Flyable { void fly(); } を書きます。
ヒント2を見る
class Bird implements Flyable { @Override public void fly() { System.out.println("飛ぶ"); } }。