015 ポリモーフィズム(アップキャスト) 005 解答例

class Animal {
    void makeSound() {
        System.out.println("Some generic sound");
    }
}

class Dog extends Animal {
    void makeSound() {
        System.out.println("Woof!");
    }
}

public class Main {
    public static void main(String[] args) {
        // Animal クラスのオブジェクトを作成
        Animal animal = new Animal();
        // Animal クラスの makeSound メソッドを呼び出す
        animal.makeSound();

        // Dog クラスのオブジェクトを作成
        Dog dog = new Dog();
        // Dog クラスの makeSound メソッドを呼び出す(オーバーライドされたバージョンが呼ばれる)
        dog.makeSound();

        // アップキャストを使用して Animal クラスの参照変数で Dog クラスのオブジェクトを操作
        Animal upcastedDog = new Dog();
        // Animal クラスの参照変数で Dog クラスの makeSound メソッドを呼び出す(オーバーライドされたバージョンが呼ばれる)
        upcastedDog.makeSound();
    }
}

この例では、Animal クラスと Dog クラスを作成し、メインクラスでそれぞれのクラスのオブジェクトを作成しています。そして、アップキャストを使用して Animal クラスの参照変数で Dog クラスのオブジェクトを操作しています。

ポリモーフィズムにおけるアップキャスト

ポリモーフィズムにおけるアップキャストは、異なるクラス型のオブジェクトを、それらの共通の親クラス型に変換するプロセスです。アップキャストにより、子クラス型のオブジェクトを親クラス型の参照変数で扱うことができます。これは、オブジェクト指向プログラミングの中で特に重要な概念であり、ポリモーフィズムの実現に寄与します。

以下に、アップキャストの主なポイントとその解説を示します。

  1. 基本概念:
    • アップキャストは、子クラス型のオブジェクトを親クラス型に変換する操作を指します。
    • 例えば、Dog クラスが Animal クラスを継承している場合、Dog クラスのオブジェクトは Animal クラスの参照変数で扱うことができます。
  2. 例題:
    • Animal クラスと Dog クラスがある場合、Dog クラスのオブジェクトを Animal クラスの参照変数で操作することができます。
    • これにより、共通のメソッドやプロパティにアクセスできますが、子クラス固有のメソッドやプロパティにはアクセスできません。
  3. ポリモーフィズムの一環:
    • アップキャストはポリモーフィズムの一部であり、異なる型のオブジェクトを同じ型の参照変数で統一的に扱うことができます。
    • これにより、コードの柔軟性が向上し、拡張性が増します。
  4. 実行時の動的な挙動:
    • アップキャストにより、コンパイル時には親クラス型のメソッドしか呼び出せませんが、実行時にはオブジェクトの実際の型に基づいて適切なメソッドが呼び出されます。
// アップキャストの例
Animal animal = new Dog();  // Dog クラスのオブジェクトを Animal クラスの参照変数で扱う
animal.makeSound();  // 実行時に Dog クラスのオーバーライドされた makeSound メソッドが呼ばれる

アップキャストは、ポリモーフィズムの基本的なメカニズムであり、コードの再利用性と拡張性を高める重要な手段です。

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