継承とポリモーフィズムの実践的な理解

インスタンスの型確認

以下の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
    }
}

この例では、文字列がObjectStringComparableのインスタンスであることを確認しています。

継承とキャストの動作

次のサンプルコードは、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

この結果から、オブジェクトの実際の型によって呼び出されるメソッドが決まることがわかります。

タグ: Java 継承 ポリモーフィズム キャスト オブジェクト指向

6月30日 17:59 投稿