本文へスキップ
BecomeCoder

Javaオブジェクト指向コース · 第4章 多態性 ― 同じ呼び方で、違う動きをする · レッスン11

オーバーライドの基本 ― @Overrideで振る舞いを変える

ブラウザで完結

導入

「動物」はそれぞれ違う鳴き方をします。犬は「ワン」、猫は「ニャー」。共通のメソッド名 sound() を使いながら、クラスごとに中身を変えたい——これがオーバーライドの出番です。

説明

サブクラスで、親クラスと 同じ名前・同じ引数・同じ戻り値の型 のメソッドを定義すると、親の実装を「上書き」できます。これを オーバーライド と呼びます。目印として @Override というアノテーションをつけるのが慣習です(コンパイラが「本当に親のメソッドを正しく上書きできているか」をチェックしてくれます)。

public class Main {
    public static void main(String[] args) {
        Animal a = new Animal();
        Dog d = new Dog();
        Cat c = new Cat();
        a.sound();
        d.sound();
        c.sound();
    }
}

class Animal {
    void sound() {
        System.out.println("なんらかの音");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("ワン");
    }
}

class Cat extends Animal {
    @Override
    void sound() {
        System.out.println("ニャー");
    }
}

Animalsound() は「なんらかの音」という当たり障りのない実装ですが、DogCat はそれぞれ自分らしい鳴き声にオーバーライドしています。

やってみよう

下のエディタを実行し、AnimalDogCat それぞれで sound() の中身が違うことを確認しましょう。もう1種類の動物クラスを追加してオーバーライドしてみてください。

演習

Bird extends Animal を作り、sound()"チュンチュン" と表示するようにオーバーライドしてください。mainnew Bird() を作って sound() を呼んでください。

ヒント1を見る

class Bird extends Animal { @Override void sound() { System.out.println("チュンチュン"); } }

ヒント2を見る

mainBird b = new Bird(); b.sound();

実際に動かしてみよう

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

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

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