// 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
の使用により、プログラムが実行時に安全かつ正確に型を確認できます。