Java継承とオーバーライド
animal,cat,humanの3つのクラスをつくる
継承元としてAnimalクラスを作り、cry,jumpメソッドを作成し振る舞いとしてうおおん、30cm飛ぶをいれる。
//継承元animalクラスにはcry,jumpメソッドを作成してる public class Animal{ public void cry() { System.out.println("うおおおん"); } public void jump() { System.out.println("30cm飛んだ!"); } }
humanクラスはアニマルクラスを継承し、cry,imaginationメソッドを作成します。振る舞いとして想像した、えーんをいれる。
jumpは継承元で実装されてるのでオーバーライドせずアニマルクラスのcryをオーバーライドし、継承先として人間だけがもってる振る舞い(想像する)を実装する。
//AnimalクラスをextendsしたHumanクラスのcryメソッドはAnimalクラスにあり、 //継承先と振る舞いが違うので継承先でオーバーライドする public class Human extends Animal { //このメソッドをたどるとanimalクラスを継承しており、humanクラスには継承先として人間だけがもってる振る舞いがあるのでimaginationメソッドを実行します public void imagination() { System.out.println("想像を働かせた!"); } //このメソッドをたどるとAnimalクラスを継承してますAnimalクラスを見に行くとcryメソッドと同じメソッド //があるのでHumanのcryメソッドはAnimalクラスのcryメソッドをオーバーライドしてます @Override public void cry() { System.out.println("えーん"); } }
catクラスはアニマルクラスを継承しcry,jumpメソッドを作成し2メソッドとも親からオーバーライドしてふるまいをかえている。
//animalクラスをextendsしたcatクラスのcry,jumpメソッドはanimalクラスにある //それぞれ継承先と振る舞いが違うので継承先でオーバーライドする public class Cat extends Animal { //このメソッドをたどるとAnimalクラスを継承しており、Animalクラスを見に行くとcryメソッドと同じメソッド //があるのでCatクラスのcryメソッドはanimalクラスのcryメソッドをオーバーライドしてます public void cry() { System.out.println("にゃーん"); } //このメソッドをたどるとAnimalクラスを継承しており、Animalクラスを見に行くとjumpメソッドと同じメソッド //があるのでCatクラスのjumpメソッドはAnimalクラスのjumpメソッドをオーバーライドしてます public void jump() { System.out.println("1m飛んだ!"); } }
継承関係図
クラス | メソッド | 説明 | 継承関係 |
---|---|---|---|
animal | cry | うおおん | 継承元 |
jump | 30cm飛ぶ | 継承元 | |
human | imagination | 想像した | imaginationはanimalクラスにないので作成 |
cry | えーん | animalクラスのcryメソッドをオーバーライド | |
Cat | jump | 1m飛ぶ | animalクラスのjumpメソッドをオーバーライド |
cry | にゃーん | animalクラスのcryメソッドをオーバーライド |
クラスの呼び方
呼び方1 | 呼び方2 | ※現場での利用例 |
---|---|---|
親クラス | スーパークラス | 基底クラス(baseコントローラー。各画面コントローラーの共通メソッドを記載) |
子クラス | サブクラス | クラス(通常の画面コントローラー。baseコントローラーを継承) |
オーバーライドとは。
継承先のクラスは継承元のクラスを実行でき、catクラス、humanクラスはアニマルクラスのcry、jumpメソッドをつかえるようになること
で、同じcryメソッドを継承先で実装するとcryのメソッドが上書きされる。
基盤となる(親クラス)で共通のメソッドは実行できるが継承先のクラスではオーバーライドでふるまいを書き換えることもできるし
書き換えずにそのまま実行することもできるし継承元にはないメソッド(アニマルクラスにはない)を実行できる。
Mainクラス
Mainクラスでは、3つのクラスがある
- animaruクラスをnewした、animalObj
- animaruクラスを継承した、Humanクラスをnewした、HumanObj
- animaruクラスを継承した、Catクラスをnewした、CatObj
Animalクラス継承元であり継承先としてCat,Humanクラスを作成して、それぞれnewしてオブジェクトを生成し、クラスで定義したメソッドを使う。
public class Mainexe { public static void main(String[] args) { Animal animal = new Animal(); Cat cat = new Cat(); Human human = new Human(); cat.cry(); human.cry(); animal.cry(); cat.jump(); //humanにはjumpは実装されてないが継承元のanimalで実装されてる human.jump(); //このメソッドは継承元なのでanimalクラスのjumpメソッドが実行されます animal.jump(); human.imagination(); } }