015 ポリモーフィズム(インスタンス型の確認) 016 解答例

// Animal クラスの定義
class Animal {
    // sound メソッド
    public void sound() {
        System.out.println("Animal makes a sound");
    }
}

// Dog クラスの定義(Animal クラスを継承)
class Dog extends Animal {
    // sound メソッドをオーバーライド
    @Override
    public void sound() {
        System.out.println("Dog barks");
    }
}

// Cat クラスの定義(Animal クラスを継承)
class Cat extends Animal {
    // sound メソッドをオーバーライド
    @Override
    public void sound() {
        System.out.println("Cat meows");
    }
}

// メインクラス
public class Main {
    public static void main(String[] args) {
        // Animal クラス型の動的な配列を作成
        Animal[] animals = new Animal[3];

        // 異なる動物のオブジェクトを配列に格納
        animals[0] = new Animal();
        animals[1] = new Dog();
        animals[2] = new Cat();

        // 配列をイテレートして各オブジェクトのクラスを確認
        for (Animal animal : animals) {
            // Animal クラスのインスタンスであるかを確認
            if (animal instanceof Animal) {
                System.out.println("This is an instance of Animal");
            }
            // Dog クラスのインスタンスであるかを確認
            if (animal instanceof Dog) {
                System.out.println("This is an instance of Dog");
            }
            // Cat クラスのインスタンスであるかを確認
            if (animal instanceof Cat) {
                System.out.println("This is an instance of Cat");
            }

            // 各オブジェクトの sound メソッドを呼び出し
            animal.sound();

            // 区切りの出力
            System.out.println("----------------------");
        }
    }
}

このプログラムでは、動的な配列に Animal、Dog、Cat クラスのオブジェクトを格納し、instanceof キーワードを使用して各オブジェクトがどのクラスのインスタンスかを確認しています。

出力結果:

This is an instance of Animal
Animal makes a sound
----------------------
This is an instance of Animal
This is an instance of Dog
Animal makes a sound
Dog barks
----------------------
This is an instance of Animal
This is an instance of Cat
Animal makes a sound
Cat meows
----------------------

instanceof演算子

instanceof 演算子は、Javaプログラムでオブジェクトが特定の型のインスタンスであるかどうかを確認するために使用される演算子です。これは主に、ポリモーフィズムの文脈で型のチェックを行うのに役立ちます。

以下は instanceof の基本的な構文です:

if (オブジェクト instanceof クラス名) {
    // オブジェクトは指定されたクラスのインスタンスです
} else {
    // オブジェクトは指定されたクラスのインスタンスではありません
}

例えば、以下のような場面で使用されます:

Animal animal = new Dog();

if (animal instanceof Dog) {
    // animalはDogクラスのインスタンスである場合の処理
    Dog dog = (Dog) animal; // ダウンキャストが安全
    dog.bark(); // Dog独自のメソッドを呼び出せる
} else {
    // animalはDogクラスのインスタンスでない場合の処理
}

このコードでは、animal オブジェクトが Dog クラスのインスタンスであるかどうかを確認しています。確認後、Dog クラスの独自のメソッドを安全に呼び出すことができます。instanceof の使用により、プログラムが実行時に安全かつ正確に型を確認できます。

「015 ポリモーフィズム」問題集リスト