本文へスキップ
BecomeCoder

Javaオブジェクト指向コース · 第5章 抽象クラスとインタフェース ― 型で「約束」する · レッスン18

複数のインタフェースを実装する

ブラウザで完結

導入

クラス継承extends)は1つのクラスからしかできませんが、インタフェースは 複数 実装できます。「飛べるし泳げるアヒル」のように、複数の「できること」を1つのクラスに持たせてみましょう。

説明

implements のあとにカンマ区切りで複数のインタフェースを指定します。

public class Main {
    public static void main(String[] args) {
        Duck d = new Duck();
        d.fly();
        d.swim();
    }
}

interface Flyable {
    void fly();
}

interface Swimmable {
    void swim();
}

class Duck implements Flyable, Swimmable {
    @Override
    public void fly() {
        System.out.println("飛ぶ");
    }

    @Override
    public void swim() {
        System.out.println("泳ぐ");
    }
}

DuckFlyableSwimmable両方 の約束を守り、fly()swim() の両方を実装しています。クラスの継承は1本道ですが、インタフェースなら「できること」をいくつでも組み合わせられます。

やってみよう

下のエディタで Duck に別のインタフェース(例えば Walkable)を追加で実装してみましょう。

演習

interface Walkable { void walk(); } を追加してください。DuckWalkable も実装させ、walk()"歩く" と表示するようにしてください。mainfly()swim()walk() の順に呼んでください。

ヒント1を見る

class Duck implements Flyable, Swimmable, Walkable { ... } のようにカンマで並べます。

ヒント2を見る

walk() の実装も他の2つと同じ形で public void walk() { System.out.println("歩く"); } と書きます。

実際に動かしてみよう

下のエディタにJavaを書いて「実行」を押すと、学習用シミュレータが System.out.println の出力を表示します(本物のJVMではなく、教材の範囲を再現した軽量エンジンです)。クラス・継承・コレクションなども動きます。Scanner で入力を読む例は「標準入力」欄に値を入れてください。本文の例を書き換えて動かしてみましょう(Stream・ラムダ・スレッド・ファイル入出力など一部の機能は対象外です)。

Java — ブラウザ内で実行(学習用シミュレータ)

Javaの教材サブセットを動かす学習用シミュレータを読み込みます(本物のJVMではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。