第十八章 
 〜クラス編〜
 オーバーライド
 オーバーライドと言うのは、スーパークラスで定義したメソッドを再度サブクラスで
定義し直すことです。簡単に言うですとスーパークラスとサブクラスで、同じ名前、同
じ引数のメソッドがあるということです。そしてこのオーバーライドをする事によって
スーパークラスの方で定義された処理は、実行されずにサブクラスで定義した処理を行
うことになるです。
 実際にサンプルを見てみるです〜
Rei18_1
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
class Rei18_1{
    public static void main(String[] args){
        Human mega = new Human();
        Oogui giga = new Oogui();

        System.out.println("メガさんの食事");
        mega.eat();
        System.out.println("ギガさんの食事");
        giga.eat();
    }
}

class Human{
    public void eat(){
        System.out.println("ご飯を食べる");
    }
}

class Oogui extends Human{
    public void eat(){
        System.out.println("肉類を食べる");
        System.out.println("麺類を食べる");
        System.out.println("ドネルサンドを食べる");
    }
}

 これを実行するとメガさんの方はご飯を食べて終わりですね!(Humanクラスのeat()
メソッドを呼んでいる)一方ギガさんの食事は肉や麺、ドネルサンドと言ったものを食
べてるですね!(Ooguiクラスのeat()メソッドを呼んでいる)これは、eat()メソッドを
オーバーライドしたからこのような結果になったです。
 もし、OoguiクラスでHumanクラスのeatメソッドを呼び出したかったらどうすればい
いのかと言うですとそれは、super.を使って呼び出せばいいです。super.はスーパー
クラスで宣言したものを呼び出すときに省略可と言ったキーワードですね!でも今回の
場合だと省略すると呼び出せないのでsuper.を使って呼び出すです。
Ooguiクラスのeat()メソッドは次のようになるです。
public void eat(){
    super.eat();
    System.out.println("肉類を食べる");
    System.out.println("麺類を食べる");
    System.out.println("ドネルサンドを食べる");
}
 Ooguiクラスのeat()メソッドの1行目にsuper.eat()を追加することによって実行結果
は、肉類を食べるの前にご飯を食べるが追加されるです。これはHumanクラスのeat()メ
ソッドを呼び出したからですね!このsuper.eat()は、コンストラクタのときと違って
1行目に書く必要は別にないです。そのへんは実際にプログラムを作るときによって変
わるです。ほとんどは1行目に来ると思うです〜

 オーバーライドはメソッドのところでやったオーバーロードとごっちゃ混ぜになり やすいのでしっかり区別をしてほしいです。ちなみにオーバーロードは同じメソッド
名で異なる引数を定義することだったですね!


今回のポイント
@ スーパークラスで定義したメソッドをサブクラスで再度定義することをオーバーラ
  イドと言う。
A オーバーライドした後でスーパークラスのメソッドを呼びたい場合はsuper.を使っ
  て呼ぶ。

TOPに戻る   Java講座に戻る