本文へスキップ
BecomeCoder

Javaオブジェクト指向コース · 第3章 継承 ― クラスを拡張する · レッスン9

フィールドとメソッドの継承 ― 親のものがそのまま使える

ブラウザで完結

導入

継承したフィールドやメソッドは、サブクラスの中で「もともと自分が持っていたもの」のようにそのまま使えます。ここで改めて、その感覚を確認しておきましょう。

説明

DogAnimal を継承していますが、Animaleat() をそのまま呼びつつ、Dog 独自の bark() も呼べます。

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("ポチ");
        dog.eat();    // 親から継承したメソッド
        dog.bark();   // Dog独自のメソッド
    }
}

class Animal {
    String name;

    Animal(String name) {
        this.name = name;
    }

    void eat() {
        System.out.println(name + "がごはんを食べる");
    }
}

class Dog extends Animal {
    Dog(String name) {
        super(name);
    }

    void bark() {
        System.out.println(name + "が吠える");
    }
}

bark() の中で name を使っていますが、これは Dog 自身のフィールドではなく Animal から継承した name です。継承したフィールドは、サブクラスの中でも普通のフィールドと同じように使えます。

やってみよう

下のエディタを実行し、Dog が継承した eat() と独自の bark() の両方を呼べることを確認しましょう。Dog にもう1つ独自のメソッドを追加してみてください。

演習

Bird extends Animal を作り、独自メソッド fly()name + "が飛ぶ" と表示)を追加してください。mainnew Bird("ツバメ") を作り、継承した eat() と独自の fly() の両方を呼んでください。

ヒント1を見る

class Bird extends Animal { Bird(String name) { super(name); } void fly() { System.out.println(name + "が飛ぶ"); } }

ヒント2を見る

mainBird b = new Bird("ツバメ"); b.eat(); b.fly(); の順に呼びます。

実際に動かしてみよう

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

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

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