014 継承(明示的なスーパークラスのコンストラクタ呼び出し) 015 解答例

// Animal クラスの定義
class Animal {
    // 動物の種類を表すインスタンス変数
    protected String animalType;

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

    // 動物の種類を取得するメソッド
    public String getAnimalType() {
        return animalType;
    }
}

// Dog クラスの定義
class Dog extends Animal {
    // 犬の種類を表すインスタンス変数
    private String dogType;

    // コンストラクタ
    public Dog(String animalType, String dogType) {
        // 親クラスのコンストラクタを明示的に呼び出す
        super(animalType);
        this.dogType = dogType;
    }

    // 犬の鳴き声を取得するメソッド
    public String getDogSound() {
        // 犬の鳴き声を返す(ここでは簡略化)
        return "Woof! Woof!";
    }
}

// メインクラス
public class Main {
    public static void main(String[] args) {
        // Dog クラスのインスタンスを生成
        Dog myDog = new Dog("Mammal", "Golden Retriever");

        // 親クラスのメソッドを使って動物の種類を取得
        System.out.println("Animal Type: " + myDog.getAnimalType());

        // 子クラスのメソッドを使って犬の鳴き声を取得
        System.out.println("Dog Sound: " + myDog.getDogSound());
    }
}

この例では、Animal クラスが親クラスであり、Dog クラスが子クラスです。Dog クラスのコンストラクタ内で super(animalType) を使用して、親クラスのコンストラクタを明示的に呼び出しています。

「014 継承」問題集リスト