オブジェクト指向の柔軟性!「多態性(Polymorphism)」とは?
Javaのオブジェクト指向における3つの柱は、継承・カプセル化・多態性です。
その中でも多態性(Polymorphism)は、1つのインターフェースで複数の実装を扱える柔軟な仕組みです。
多態性とは?
多態性(ポリモーフィズム)とは、同じメソッド名でありながら、呼び出す対象によって異なる動作をする性質のことです。
「同じメッセージ(メソッド呼び出し)に対して、異なるふるまいをする」ことができます。
多態性の具体例(継承 + オーバーライド)
class Animal {
public void speak() {
System.out.println("動物が鳴く");
}
}
class Dog extends Animal {
@Override
public void speak() {
System.out.println("ワンワン!");
}
}
class Cat extends Animal {
@Override
public void speak() {
System.out.println("ニャーニャー!");
}
}
同じメソッドでも動作が変わる
public class Main {
public static void main(String[] args) {
Animal a1 = new Dog(); // Dog型のインスタンス
Animal a2 = new Cat(); // Cat型のインスタンス
a1.speak(); // → ワンワン!
a2.speak(); // → ニャーニャー!
}
}
ここでは Animal
型の変数でありながら、中身(実体)に応じたメソッドが実行されている点がポイントです。
多態性の種類
- オーバーライドによる多態性:親クラスのメソッドを子クラスで上書き
- インターフェースを使った多態性:異なるクラスで同じメソッドを定義
インターフェースを使った例
interface Shape {
void draw();
}
class Circle implements Shape {
public void draw() {
System.out.println("円を描きます");
}
}
class Square implements Shape {
public void draw() {
System.out.println("四角を描きます");
}
}
public class Main {
public static void main(String[] args) {
Shape s1 = new Circle();
Shape s2 = new Square();
s1.draw(); // → 円を描きます
s2.draw(); // → 四角を描きます
}
}
多態性のメリット
- コードの柔軟性と再利用性が高まる
- 拡張しやすいプログラム設計ができる
- 異なるクラスの処理を共通の方法で扱える
まとめ
多態性(Polymorphism)は、Javaのオブジェクト指向を支える重要な概念で、1つの型で多様なふるまいを実現する仕組みです。
継承・インターフェース・オーバーライドを通じて、拡張性の高い柔軟なプログラム設計が可能になります。
「共通の型で扱って、ふるまいだけ切り替える」この感覚を意識して、実践に活かしてみましょう!