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
クラスのオブジェクトを操作しています。
ポリモーフィズムにおけるアップキャスト
ポリモーフィズムにおけるアップキャストは、異なるクラス型のオブジェクトを、それらの共通の親クラス型に変換するプロセスです。アップキャストにより、子クラス型のオブジェクトを親クラス型の参照変数で扱うことができます。これは、オブジェクト指向プログラミングの中で特に重要な概念であり、ポリモーフィズムの実現に寄与します。
以下に、アップキャストの主なポイントとその解説を示します。
- 基本概念:
- アップキャストは、子クラス型のオブジェクトを親クラス型に変換する操作を指します。
- 例えば、
Dog
クラスがAnimal
クラスを継承している場合、Dog
クラスのオブジェクトはAnimal
クラスの参照変数で扱うことができます。
- 例題:
Animal
クラスとDog
クラスがある場合、Dog
クラスのオブジェクトをAnimal
クラスの参照変数で操作することができます。- これにより、共通のメソッドやプロパティにアクセスできますが、子クラス固有のメソッドやプロパティにはアクセスできません。
- ポリモーフィズムの一環:
- アップキャストはポリモーフィズムの一部であり、異なる型のオブジェクトを同じ型の参照変数で統一的に扱うことができます。
- これにより、コードの柔軟性が向上し、拡張性が増します。
- 実行時の動的な挙動:
- アップキャストにより、コンパイル時には親クラス型のメソッドしか呼び出せませんが、実行時にはオブジェクトの実際の型に基づいて適切なメソッドが呼び出されます。
// アップキャストの例
Animal animal = new Dog(); // Dog クラスのオブジェクトを Animal クラスの参照変数で扱う
animal.makeSound(); // 実行時に Dog クラスのオーバーライドされた makeSound メソッドが呼ばれる
アップキャストは、ポリモーフィズムの基本的なメカニズムであり、コードの再利用性と拡張性を高める重要な手段です。