014 継承(継承の基本) 001 解答例

// 親クラス: Vehicle
class Vehicle {
    // エンジンを起動するメソッド
    void start() {
        System.out.println("エンジンを起動します。");
    }

    // エンジンを停止するメソッド
    void stop() {
        System.out.println("エンジンを停止します。");
    }
}

// 子クラス1: Car
class Car extends Vehicle {
    // アクセルを踏むメソッド
    void accelerate() {
        System.out.println("アクセルを踏みます。");
    }
}

// 子クラス2: Bicycle
class Bicycle extends Vehicle {
    // ベルを鳴らすメソッド
    void ringBell() {
        System.out.println("ベルを鳴らします。");
    }
}

// 動作確認クラス: VehicleTest
public class VehicleTest {
    public static void main(String[] args) {
        // Carクラスのオブジェクトを作成
        Car myCar = new Car();
        // Carクラスのメソッドを呼び出し
        myCar.start();
        myCar.accelerate();
        myCar.stop();

        // Bicycleクラスのオブジェクトを作成
        Bicycle myBicycle = new Bicycle();
        // Bicycleクラスのメソッドを呼び出し
        myBicycle.start();
        myBicycle.ringBell();
        myBicycle.stop();
    }
}

この例では、親クラス Vehiclestartstop メソッドを追加し、子クラス CarBicycle がそれを継承しています。また、Car クラスには追加メソッドとして accelerate を、Bicycle クラスには ringBell を追加しています。動作確認クラス VehicleTest でそれぞれのクラスのオブジェクトを作成し、メソッドを呼び出すことで動作を確認できます。

継承の基本

継承(Inheritance)は、オブジェクト指向プログラミングの重要な概念の一つです。これは、既存のクラス(親クラスまたはスーパークラスと呼ばれることがあります)から新しいクラス(子クラスまたはサブクラスと呼ばれることがあります)を作成するプロセスです。継承を使用すると、既存のクラスの機能を再利用し、新しいクラスに独自の機能を追加できます。

以下は、「継承の基本」に関する解説です。

親クラスと子クラス

親クラス(スーパークラス)の作成:

親となるクラスを作成します。このクラスは、一般的な機能や特性を持っています。

// 親クラス
class Vehicle {
    void start() {
        System.out.println("エンジンを起動します。");
    }

    void stop() {
        System.out.println("エンジンを停止します。");
    }
}


子クラスの作成と継承:

子クラスは、extends キーワードを使用して親クラスを継承します。これにより、子クラスは親クラスのすべてのメソッドとフィールドを受け継ぎます。

// 子クラス1
class Car extends Vehicle {
    void accelerate() {
        System.out.println("アクセルを踏みます。");
    }
}

// 子クラス2
class Bicycle extends Vehicle {
    void ringBell() {
        System.out.println("ベルを鳴らします。");
    }
}

メソッドの追加

新しいメソッドの追加:
子クラスでは、親クラスには存在しない独自のメソッドを追加できます。これにより、子クラスに独自の振る舞いを付加できます。

インスタンスの作成と利用

public class VehicleTest {
    public static void main(String[] args) {
        // 親クラスのインスタンス
        Vehicle vehicle = new Vehicle();
        vehicle.start();
        vehicle.stop();

        // 子クラス1のインスタンス
        Car car = new Car();
        car.start();
        car.accelerate();
        car.stop();

        // 子クラス2のインスタンス
        Bicycle bicycle = new Bicycle();
        bicycle.start();
        bicycle.ringBell();
        bicycle.stop();
    }
}

この例では、親クラス Vehicle に start と stop メソッドがあり、子クラス Car と Bicycle がそれを継承し、独自のメソッドを追加しています。

継承の利点

  1. コードの再利用:
    • 親クラスで定義された機能や振る舞いを、子クラスが再利用できます。これにより、冗長なコードを減少させ、保守性を向上させます。
  2. 拡張性:
    • 子クラスは親クラスの機能を拡張できます。新しいメソッドやフィールドを追加することで、より複雑な機能を持つクラスを作成できます。

使い方のポイント

  1. is-a 関係:
    • 継承は、is-a 関係が成り立つときに使用します。つまり、子クラスは親クラスの一種であるという関係が成り立つ場合です。
  2. 親クラスのコンストラクタ:
    • 子クラスは親クラスのコンストラクタを呼び出す必要があります。これは、親クラスの初期化が行われるためです。

// 親クラス
class Vehicle {
    void start() {
        System.out.println("エンジンを起動します。");
    }

    void stop() {
        System.out.println("エンジンを停止します。");
    }
}

// 子クラス1
class Car extends Vehicle {
    void accelerate() {
        System.out.println("アクセルを踏みます。");
    }
}

// 子クラス2
class Bicycle extends Vehicle {
    void ringBell() {
        System.out.println("ベルを鳴らします。");
    }
}

public class VehicleTest {
    public static void main(String[] args) {
        // 親クラスのインスタンス
        Vehicle vehicle = new Vehicle();
        vehicle.start();
        vehicle.stop();

        // 子クラス1のインスタンス
        Car car = new Car();
        car.start();
        car.accelerate();
        car.stop();

        // 子クラス2のインスタンス
        Bicycle bicycle = new Bicycle();
        bicycle.start();
        bicycle.ringBell();
        bicycle.stop();
    }
}

「継承の基本」は、オブジェクト指向プログラミングにおいて強力なツールであり、柔軟で効率的なコードの構築をサポートします。適切に使用することで、コードの再利用性と保守性を向上させることができます。

「014 継承」問題集リスト