Javaの多態性とは何か
サブクラスのオブジェクトは、スーパークラスの型として参照および操作できます。多態性はオブジェクト指向プログラミングの重要な特性の 1 つであり、1 つの変数が異なる型のオブジェクトを参照し、実際の型による呼び出しに基づいて対応するメソッドを実行できます。
具体的に言うと、親クラスがサブクラスのオブジェクトを指す参照を持つ場合、この親クラスの参照から、親クラスで定義されたメソッドを呼び出すだけでなく、サブクラスでオーバーライドされたメソッドも呼び出すことができます。これにより、異なるサブクラスのオブジェクトに対して統一した操作を実行でき、コードの柔軟性と拡張性を向上させることが可能です。
多態性の発現には継承とメソッドオーバーライドという2つの条件が必要である。継承により、サブクラスはスーパークラスの属性とメソッドを継承し、メソッドオーバーライドにより、サブクラスはスーパークラス内のメソッドを自身のロジックを実装するようにオーバーライドできる。
例えば、Animalという抽象クラスとそのサブクラスであるDogとCatがある場合、Animalクラスにeat()メソッドを定義し、DogとCatクラスでそのメソッドをオーバーライドします。DogとCatオブジェクトをAnimalクラスの参照で参照することで、それぞれ独自のeat()メソッドを呼び出し、統一した操作を実現できます。
abstract class Animal {
public abstract void eat();
}
class Dog extends Animal {
@Override
public void eat() {
System.out.println("Dog is eating.");
}
}
class Cat extends Animal {
@Override
public void eat() {
System.out.println("Cat is eating.");
}
}
public class Main {
public static void main(String[] args) {
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.eat(); // 输出: Dog is eating.
animal2.eat(); // 输出: Cat is eating.
}
}
上記の例のように、animal1とanimal2はともにAnimal型への参照ですが、それぞれDogオブジェクトとCatオブジェクトを指します。このような多態性を利用することで、さまざまなサブクラスのオブジェクトを一様な方法で操作することができ、コードの再利用性と拡張性を高めることができます。