【図解付き】Javaのポリモーフィズムとは?初心者でもわかる多態性の意味と使い方

Java

Javaの勉強をしていると、「ポリモーフィズム(多態性)」という言葉が登場します。
初めて聞くと「なんだか難しそう…」と思ってしまいますが、
実はこれ、Javaでプログラムをすっきり整理し、効率よく動かすための重要な考え方なんです。

この記事では、**ポリモーフィズムとは何か?どんな場面で使うのか?どうやって使えばいいのか?**を、実際のJavaコードと図解を使って、わかりやすく解説します!


✅ この記事でわかること

  • Javaにおけるポリモーフィズムの基本概念
  • オーバーロードとオーバーライドの違い
  • 実行時ポリモーフィズムの仕組み
  • 多態性を使った実践的なコードの書き方
  • よくあるエラーとその対処法
  • 設計力を高めるためのポイント

🧠 ポリモーフィズム(多態性)とは?

一言で言えば…

**「同じ名前の操作でも、オブジェクトの種類によって違う動きをする仕組み」**です。

たとえば、「動物が鳴く」という操作があるとします。
犬なら「ワンワン」、猫なら「ニャー」、カエルなら「ゲロゲロ」と鳴きますよね?

これをJavaで表現したのが「ポリモーフィズム」です。


🔧 ポリモーフィズムの種類

種類説明実装方法
コンパイル時ポリモーフィズム引数の違いでメソッドを使い分けるメソッドのオーバーロード
実行時ポリモーフィズムオブジェクトの種類によって動作が変わるメソッドのオーバーライド

📘 メソッドのオーバーロード(Overload)

public class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
}

このように、同じ「add」という名前のメソッドでも、引数の型が違えば別の処理として扱えます。


🧪 メソッドのオーバーライド(Override)

class Animal {
public void speak() {
System.out.println("動物の鳴き声");
}
}

class Dog extends Animal {
@Override
public void speak() {
System.out.println("ワンワン!");
}
}
Animal a = new Dog();
a.speak(); // → ワンワン!

親クラスで定義した speak() を、子クラスで「自分流」に上書きする。これが「オーバーライド」です。


🚀 実行時ポリモーフィズムを活用する例

抽象クラスと配列を使った例

abstract class Shape {
abstract double area();
}

class Circle extends Shape {
double r;
Circle(double r) { this.r = r; }
double area() { return Math.PI * r * r; }
}

class Rectangle extends Shape {
double w, h;
Rectangle(double w, double h) {
this.w = w; this.h = h;
}
double area() { return w * h; }
}
public class Main {
public static void main(String[] args) {
Shape[] shapes = {
new Circle(3),
new Rectangle(4, 5)
};
for (Shape s : shapes) {
System.out.println("面積:" + s.area());
}
}
}

結果:

コピーする編集する面積:28.27
面積:20.0

このように、「Shape」という親クラスだけを意識してコードを書けるのがポリモーフィズムの魅力です。


🧱 インターフェースで実装する例

interface Greeter {
void greet();
}

class EnglishGreeter implements Greeter {
public void greet() {
System.out.println("Hello!");
}
}

class JapaneseGreeter implements Greeter {
public void greet() {
System.out.println("こんにちは!");
}
}
Greeter g1 = new EnglishGreeter();
Greeter g2 = new JapaneseGreeter();

g1.greet(); // → Hello!
g2.greet(); // → こんにちは!

🎯 ポリモーフィズムを使うメリット

  • コードがすっきり:同じ名前のメソッドで管理しやすい
  • メンテナンスが簡単:新しいクラス追加でも既存コードを変更しなくていい
  • チーム開発でも役割分担がしやすい
  • 現実世界のモデルに近い設計が可能

⚠️ ポリモーフィズムで注意すべきポイント

  • private メソッドはオーバーライドできません
  • static メソッドも多態性の対象外です
  • final クラスやメソッドは拡張不可

📚 もっと深く学びたい人へ

「Javaの設計力」を高めたい方には、絶対にJavaプログラマーになりたい人へ。 をおすすめします。

  • 抽象クラスとインターフェースの使い分け
  • 実際の現場での活用法
  • チーム開発でのベストプラクティス

まで、実践に役立つ内容がしっかり詰まっています。


🚀 レベルアップしたい人へ

「実際に使ってみたけどこれで合ってる?」「コードレビューが欲しい」
そんなときは、サイゼントアカデミー を活用しましょう。

  • Java専門の現役講師がサポート
  • 個別コード添削やレビュー対応
  • 未経験からのエンジニア転職支援

も行っており、Java学習を本気で加速できます。


✅ まとめ:ポリモーフィズムはJavaの真骨頂!

用語内容
ポリモーフィズム同じ名前のメソッドが異なる動作をすること
オーバーロード引数の違いで同名メソッドを複数定義
オーバーライド親クラスのメソッドを子クラスで上書き
メリット拡張性、保守性、柔軟性が高い

Javaを使う上で、ポリモーフィズムは「避けて通れない基本」であり、「使いこなすと設計が格段にレベルアップする武器」です。

まずは 絶対にJavaプログラマーになりたい人へ。 を読んで理解を深め、
次に サイゼントアカデミー で実践してみましょう!

コメント

タイトルとURLをコピーしました