はじめに
Javaの「ポリモーフィズム(多態性)」は、オブジェクト指向プログラミングを理解する上で非常に重要な概念です。一見難しそうに感じるかもしれませんが、基本を押さえればプログラム設計の幅が広がり、柔軟性の高いコードが書けるようになります。
この記事では、初心者にも分かりやすいようにポリモーフィズムの基本から実践的な活用法までを丁寧に解説します。また、Javaを本格的に学びたい方に向けて、絶対にJavaプログラマーになりたい人へや、より実践的な学習を提供するサイゼントアカデミーの活用もご紹介します。
ポリモーフィズムとは?
ポリモーフィズムは、**「一つのインターフェース(あるいは基底クラス)で異なる動作を実現する仕組み」**を指します。
ポリモーフィズムの種類
Javaでは、主に以下の2種類のポリモーフィズムがあります:
- コンパイル時ポリモーフィズム(静的ポリモーフィズム)
- 実行時ポリモーフィズム(動的ポリモーフィズム)
静的ポリモーフィズム:メソッドオーバーロード
メソッドオーバーロードは、同じ名前のメソッドを複数定義し、引数の型や数で区別する仕組みです。
実例
public class Calculator {
// 2つの数値を足す
public int add(int a, int b) {
return a + b;
}
// 3つの数値を足す
public int add(int a, int b, int c) {
return a + b + c;
}
// 小数点を含む数値を足す
public double add(double a, double b) {
return a + b;
}
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(2, 3)); // 出力: 5
System.out.println(calc.add(2, 3, 4)); // 出力: 9
System.out.println(calc.add(2.5, 3.5)); // 出力: 6.0
}
}
ポイント
- メソッド名は同じですが、引数の型や数が異なるため、適切なメソッドが呼び出されます。
動的ポリモーフィズム:メソッドオーバーライド
メソッドオーバーライドは、サブクラスが親クラスのメソッドを再定義する仕組みです。
実例
// 親クラス
public class Animal {
public void makeSound() {
System.out.println("動物の鳴き声");
}
}
// サブクラス1
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("ワンワン");
}
}
// サブクラス2
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("ニャーニャー");
}
}
// メインクラス
public class Main {
public static void main(String[] args) {
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.makeSound(); // 出力: ワンワン
animal2.makeSound(); // 出力: ニャーニャー
}
}
ポイント
- 共通の親クラス型(Animal型)で異なる動作を実現しています。
- 実行時に実際のインスタンス(DogやCat)に応じて適切なメソッドが呼び出されます。
ポリモーフィズムの活用例
例:動物園システム
異なる動物をまとめて管理するシステムを設計する場合、ポリモーフィズムを活用すると以下のように簡潔に書けます。
import java.util.ArrayList;
import java.util.List;
public class Zoo {
public static void main(String[] args) {
List<Animal> animals = new ArrayList<>();
animals.add(new Dog());
animals.add(new Cat());
for (Animal animal : animals) {
animal.makeSound(); // 出力: ワンワン, ニャーニャー
}
}
}
ポリモーフィズムとインターフェースの関係
ポリモーフィズムは、クラスの継承だけでなく、インターフェースを使った場合でも実現できます。
実例
// インターフェース
public interface Drawable {
void draw();
}
// 実装クラス1
public class Circle implements Drawable {
@Override
public void draw() {
System.out.println("円を描画します。");
}
}
// 実装クラス2
public class Square implements Drawable {
@Override
public void draw() {
System.out.println("四角形を描画します。");
}
}
// メインクラス
public class Main {
public static void main(String[] args) {
Drawable drawable1 = new Circle();
Drawable drawable2 = new Square();
drawable1.draw(); // 出力: 円を描画します。
drawable2.draw(); // 出力: 四角形を描画します。
}
}
Javaプログラマーを目指すあなたへ
ポリモーフィズムは、コードの柔軟性や拡張性を高めるための強力な仕組みです。この記事を参考にしながら、実際に手を動かして理解を深めてみてください。
もっと深く学びたい方は、絶対にJavaプログラマーになりたい人へを活用して基礎を固めましょう。さらに、転職やプロフェッショナルな学習を考えている方には、サイゼントアカデミーの活用もおすすめです。
まとめ
Javaのポリモーフィズムは、オブジェクト指向プログラミングの基本かつ重要な概念です。この記事で紹介した例を試しながら、コードの設計力を高めていきましょう。ポリモーフィズムを理解することで、よりスマートで拡張性の高いプログラムが書けるようになります。
あなたのJavaプログラマーとしての道を応援しています!


コメント