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();
    }
}