導入
「動物」はそれぞれ違う鳴き方をします。犬は「ワン」、猫は「ニャー」。共通のメソッド名 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("ニャー");
}
}
Animal の sound() は「なんらかの音」という当たり障りのない実装ですが、Dog と Cat はそれぞれ自分らしい鳴き声にオーバーライドしています。
やってみよう
下のエディタを実行し、Animal・Dog・Cat それぞれで sound() の中身が違うことを確認しましょう。もう1種類の動物クラスを追加してオーバーライドしてみてください。
演習
Bird extends Animal を作り、sound() を "チュンチュン" と表示するようにオーバーライドしてください。main で new Bird() を作って sound() を呼んでください。
ヒント1を見る
class Bird extends Animal { @Override void sound() { System.out.println("チュンチュン"); } }。
ヒント2を見る
main で Bird b = new Bird(); b.sound();。