// 基本クラス: Animal
class Animal {
public void makeSound() {
// サウンドの実装はサブクラスで行う
}
}
// サブクラス1: Dog
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Woof!"); // ワンワンと鳴く
}
}
// サブクラス2: Cat
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Meow!"); // ニャーニャーと鳴く
}
}
// メインクラス
public class Main {
public static void main(String[] args) {
// 動的な配列の作成
Animal[] animals = new Animal[3];
// 配列に要素を追加
animals[0] = new Dog();
animals[1] = new Cat();
animals[2] = new Dog();
// 配列の各要素から makeSound メソッドを呼び出す
for (Animal animal : animals) {
animal.makeSound();
}
}
}
この解答例では、「Animal」という基本クラスを作成し、「Dog」と「Cat」というサブクラスで「makeSound」メソッドをオーバーライドしています。そして、メインクラスで動的な配列を作成し、異なる型の動物オブジェクトを格納しています。最後に、配列の各要素からポリモーフィズムを利用して「makeSound」メソッドを呼び出し、各動物が発するサウンドを表示しています。
ポリモーフィズムにおける動的な配列
ポリモーフィズムを利用した動的な配列の使用には、以下のような利点があります。
- 柔軟性と拡張性: 動的な配列を使用することで、基本クラス型の配列に異なるサブクラスのオブジェクトを格納できます。これにより、プログラムが柔軟で拡張可能になります。新しいサブクラスが追加されても、既存のコードを変更せずに取り込むことができます。
- 統一的なインターフェース: 動的な配列を使用することで、異なる型のオブジェクトを同じ型のコレクションにまとめ、統一的なインターフェースを提供できます。これにより、共通のメソッドや操作を一貫して適用でき、コードの理解が容易になります。
- ポリモーフィズムの活用: 動的な配列はポリモーフィズムを活用する手段の一つです。基本クラス型の変数や配列に異なる型のオブジェクトを代入することで、共通のインターフェースを提供しつつ、各オブジェクトが持つ固有の振る舞いを利用できます。
- コードの再利用: 動的な配列を使用すると、同じ基本クラス型のコレクションを扱うコードを再利用できます。基本クラスに定義されたメソッドが、サブクラスによってオーバーライドされていれば、同じメソッド呼び出しで異なる振る舞いを実現できます。
- 保守性の向上: ソフトウェアが成長すると、新しい機能やクラスが追加されることがあります。動的な配列を使用することで、これらの変更に対応しやすくなります。既存のコードを大幅に変更せずに新しいクラスを導入できます。
総じて、動的な配列はプログラムの柔軟性、拡張性、保守性を向上させるために役立ちます。異なる型のオブジェクトを共通の基本型で扱うことで、より抽象的で一般的なコードを記述できます。
以下は、一般的な手順と考え方です:
基本クラスの作成:
共通の特性や振る舞いを持つ基本クラス(またはインターフェース)を作成します。この基本クラスは、共通のメソッドや属性を定義します。例えば、「Animal」という基本クラスがあります。
class Animal {
// 共通のメソッドや属性
}
サブクラスの作成:
基本クラスを継承したサブクラスを作成します。サブクラスでは、基本クラスで定義されたメソッドをオーバーライドし、独自の振る舞いを追加します。例えば、「Dog」と「Cat」というサブクラスがあります。
class Dog extends Animal {
// 独自のメソッドや属性
}
class Cat extends Animal {
// 独自のメソッドや属性
}
動的な配列の利用:
メインクラスなどで、基本クラス型の動的な配列を作成し、その中に異なるサブクラスのインスタンスを格納します。これにより、異なる型のオブジェクトを統一的に扱うことができます。
public class Main {
public static void main(String[] args) {
// 動的な配列の作成
Animal[] animals = new Animal[3];
// 配列に要素を追加
animals[0] = new Dog();
animals[1] = new Cat();
animals[2] = new Dog();
// 配列の各要素からメソッドを呼び出す
for (Animal animal : animals) {
animal.someMethod(); // someMethodはAnimalクラスに共通のメソッド
}
}
}
ポリモーフィズムを利用: 動的な配列に格納されたオブジェクトは、基本クラス型として統一的に扱われます。これにより、異なるサブクラスのオブジェクトに共通の操作を適用できます。ポリモーフィズムを利用することで、柔軟性が向上し、コードの再利用性が高まります。
以上が、「ポリモーフィズムにおける動的な配列」の基本的な考え方と手順です。