0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

抽象クラスとインターフェース

Posted at

今回は抽象クラスとインターフェースについて記事にしたいと思います。

抽象クラスとは?
「乗り物」の設計図を作りたいとします。でも、「乗り物」といっても、車や自転車、飛行機などいろいろありますよね。

抽象クラスは、「乗り物」という共通の特徴を持つ設計図のようなものです。
この設計図には、「走る」や「止まる」といった共通の動きが書かれています。
でも、「乗り物」だけでは具体的に何を作るかわかりません。直接使うことはできないのです。
そこで、この「抽象クラス」をもとにして、「車」や「自転車」といった具体的な乗り物の設計図(クラス)を作ります。

「車」は「乗り物」の特徴を受け継ぎつつ、エンジンやタイヤの数など、車特有の情報を追加します。
「自転車」も同様に、「乗り物」の特徴を持ちつつ、ペダルやギアなどを追加します。
つまり、抽象クラスは共通の部分をまとめた「未完成の設計図」で、これをもとに具体的なものを作るための基礎となります。

抽象クラス Vehicle(乗り物)

public abstract class Vehicle {
    String name;
}

    // コンストラクタ
    public Vehicle(String name) {
        this.name = name;
    }

    // 共通の動き
    public void start() {
        System.out.println(name + "が発進します。");
    }

    public void stop() {
        System.out.println(name + "が停止します。");
    }

    // 抽象メソッド(具体的な実装はしない)
    public abstract void soundHorn();
}

具体的な乗り物のクラスを作ります。

// 車クラス
public class Car extends Vehicle {

    public Car(String name) {
        super(name);
    }

    // 抽象メソッドを具体的に実装
    @Override
    public void soundHorn() {
        System.out.println(name + "がクラクションを鳴らします:ビッビッ!");
    }
}

// 自転車クラス
public class Bicycle extends Vehicle {

    public Bicycle(String name) {
        super(name);
    }

    // 抽象メソッドを具体的に実装
    @Override
    public void soundHorn() {
        System.out.println(name + "がベルを鳴らします:チリンチリン!");
    }
}

使用例:

public class Main {
    public static void main(String[] args) {
        Car car = new Car("スポーツカー");
        Bicycle bicycle = new Bicycle("マウンテンバイク");

        car.start();          // スポーツカーが発進します。
        car.soundHorn();      // スポーツカーがクラクションを鳴らします:ビッビッ!
        car.stop();           // スポーツカーが停止します。

        bicycle.start();      // マウンテンバイクが発進します。
        bicycle.soundHorn();  // マウンテンバイクがベルを鳴らします:チリンチリン!
        bicycle.stop();       // マウンテンバイクが停止します。
    }
}

インターフェースの例
イメージ:
次に、「飛べる」機能を持つものを考えてみましょう。飛行機やヘリコプターなどが該当します。
インターフェースを使ってみましょう。

// インターフェース Flyable(飛べる)
public interface Flyable {
    // 飛ぶ機能の約束事
    void fly();
}
ポイント

Flyableインターフェースはfly()というメソッドを持つことを約束しますが具体的な実装は書きません
飛べる乗り物のクラスを作ります

java
コードをコピーする
// 飛行機クラス
public class Airplane extends Vehicle implements Flyable {

    public Airplane(String name) {
        super(name);
    }

    // 抽象メソッドを実装
    @Override
    public void soundHorn() {
        System.out.println(name + "が警告音を鳴らします:ピー!");
    }

    // インターフェースのメソッドを具体的に実装
    @Override
    public void fly() {
        System.out.println(name + "が空を飛びます。");
    }
}

使用例:

public class Main {
    public static void main(String[] args) {
        Airplane airplane = new Airplane("ジェット機");

        airplane.start();         // ジェット機が発進します。
        airplane.fly();           // ジェット機が空を飛びます。
        airplane.soundHorn();     // ジェット機が警告音を鳴らします:ピー!
        airplane.stop();          // ジェット機が停止します。
    }
}

今回は抽象クラスとインターフェースについてまとめてみました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?