インスタンスの型確認
以下のJavaコードはinstanceof演算子を使用して、オブジェクトの型を確認する方法を示しています。
public class InstanceCheckDemo {
public static void main(String[] args) {
Object obj = "Java";
System.out.println("Object型か:" + (obj instanceof Object)); // true
System.out.println("String型か:" + (obj instanceof String)); // true
System.out.println("Math型か:" + (obj instanceof Math)); // false
System.out.println("Comparable型か:" + (obj instanceof Comparable)); // true
}
}
この例では、文字列がObject、String、Comparableのインスタンスであることを確認しています。
継承とキャストの動作
次のサンプルコードは、Javaの継承と型キャストの基本を示しています。
class Animal {} // 基底クラス
class Lion extends Animal {} // 派生クラス1
class Tiger extends Animal {} // 派生クラス2
public class TypeCastExample {
public static void main(String[] args) {
Animal animal = new Lion();
Lion lion = (Lion) animal; // 向上キャストが必要
animal = new Tiger();
Tiger tiger = (Tiger) animal; // 正しい型にキャスト
}
}
このコードでは、親クラスの参照を子クラスに代入するには明示的なキャストが必要であることを示しています。
ポリモーフィズムの動作
以下のコードは、継承されたクラス間でのメソッドのオーバーライドと、ポリモーフィズムによる実行時のメソッド解決を示しています。
class Base {
public int value = 50;
public void display() {
System.out.println("Base.display(), value=" + value);
}
}
class Derived extends Base {
public int value = 150;
public void display() {
System.out.println("Derived.display(), value=" + value);
}
}
public class PolyTest {
public static void main(String[] args) {
Base base = new Base();
base.display(); // Baseのメソッド
Derived derived = new Derived();
derived.display(); // Derivedのメソッド
base = derived; // 多態性の適用
base.display(); // Derivedのメソッドが呼ばれる
base.value += 2;
base.display(); // 依然としてDerivedのメソッド
((Derived)base).value += 10;
base.display(); // 更新された値を表示
}
}
実行結果:
Base.display(), value=50
Derived.display(), value=150
Derived.display(), value=150
Derived.display(), value=150
Derived.display(), value=160
この結果から、オブジェクトの実際の型によって呼び出されるメソッドが決まることがわかります。