System.out.println("Java学習中");

【Java / Spring Boot】UI/UXの視点を活かしたバックエンド開発の学習ポートフォリオ

【Java Silver対策】ポリモーフィズムについて

✅ ポリモーフィズムとは

Javaでコードを書いていると、

if (obj instanceof Dog) { ... }

のように、型ごとに処理を分ける書き方がありますが、

「少し面倒だな…」と感じたことはないでしょうか?

実はこの書き方、

もっとシンプルに書くことができます。

それが「ポリモーフィズム」です。


💻 サンプルコード

Java Silverの図形の面積を求めるコードだと少しイメージしづらいため、 今回も犬モデルポリモーフィズムを考えてみます。

abstract class Dog {
    abstract void action();
}

class ShibaDog extends Dog {
    @Override
    void action() {
        System.out.println("しば犬が元気に走った!");
    }
}

class CorgiDog extends Dog {
    @Override
    void action() {
        System.out.println("コーギーがしっぽを振った!");
    }
}

class PoodleDog extends Dog {
    @Override
    void action() {
        System.out.println("プードルがくるっと回った!");
    }
}

class ChihuahuaDog extends Dog {
    @Override
    void action() {
        System.out.println("チワワがぴょんっと跳ねた!");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog[] dogs = {
            new ShibaDog(),
            new CorgiDog(),
            new PoodleDog(),
            new ChihuahuaDog()
        };

        for (Dog d : dogs) {
            d.action();
        }
    }
}

実行結果:

しば犬が元気に走った!
コーギーがしっぽを振った!
プードルがくるっと回った!
チワワがぴょんっと跳ねた!

同じ action() を呼び出しているのに、犬の種類によって動きが変わります。


🤔 なぜこうなるか?

すべての変数は Dog 型ですが、

実体はそれぞれ異なります。

整理すると、次のようになります👇

変数の型 実体
Dog ShibaDog
Dog CorgiDog
Dog PoodleDog
Dog ChihuahuaDog

👉 見た目は同じでも、中身は違います。


🟦 ポリモーフィズムの正体

同じメソッド呼び出しでも、

実体によって処理が変わる仕組み。

これがポリモーフィズム(多態性)です。

同じ d.action() なのに、

👉 犬によって動きが変わる。

これがポリモーフィズムの面白いところです。


⚖️ instanceofとの比較

もしポリモーフィズムを使わない場合、

if (d instanceof ShibaDog) { ... }
else if (d instanceof CorgiDog) { ... }

クラスが増えるほど分岐が増え、コードが複雑になります。

しかしポリモーフィズムなら、

d.action(); だけで完結します。


🔍 ポリモーフィズムの良さ

  • if文が不要
  • クラスが増えてもコード変更なし
  • 拡張に強い

オブジェクト指向の理想的な設計です。


💡 まとめ

  • キャスト → 型を変える
  • instanceof → 型を確認する
  • ポリモーフィズム → 型を意識しない

👉 設計レベルが一段上がる考え方


🟨 最後に

オブジェクト指向では、

「何の型か?」ではなく 「何ができるか?」で考えます。

これまで「型」を意識してきましたが、

ポリモーフィズムでは、型ではなく「振る舞い」に注目します。

ポリモーフィズムは、 コードをシンプルにし、拡張しやすくするための重要な考え方です。

Java学習中の方の参考になれば幸いです 🙌


【プロフィール・作品置き場】

kenichikamoi.com


🎵 Youtube(楽曲一覧)はこちら

www.youtube.com