Javaでの正しい上方キャストと下方キャストの方法は何ですか。
Javaでのアップキャストは、サブクラスのオブジェクトをスーパークラスの参照変数に代入することを指し、ダウンキャストはスーパークラスの参照変数をそのサブクラスのオブジェクトに強制的に変換することを指します。
アップグレードの例:
class Animal {
public void sound() {
System.out.println("Animal makes sound");
}
}
class Dog extends Animal {
public void sound() {
System.out.println("Dog barks");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog(); // 创建子类对象
Animal animal = dog; // 向上转型,将子类对象赋值给父类引用变量
animal.sound(); // 调用父类引用变量的方法会执行子类的方法
}
}
結果を出力する:
Dog barks
ダウンキャスト例:
class Animal {
public void sound() {
System.out.println("Animal makes sound");
}
}
class Dog extends Animal {
public void sound() {
System.out.println("Dog barks");
}
public void fetch() {
System.out.println("Dog fetches");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Dog(); // 创建父类引用变量指向子类对象
Dog dog = (Dog) animal; // 向下转型,强制将父类引用变量转换为子类对象
dog.fetch(); // 调用子类对象的方法
}
}
「結果は次の通りです:」
Dog fetches
向下キャストにはリスクがあります。親クラスの参照変数が実際のオブジェクトを指すタイプに変換されない場合、実行時例外が発生します。そのため、ダウンキャストを行う際には、まずinstanceof演算子を使用して参照変数が目標タイプにキャストできるかどうかを判断することが最善です。これにより実行時例外を回避できます。
if (animal instanceof Dog) {
Dog dog = (Dog) animal;
dog.fetch();
} else {
System.out.println("Cannot downcast to Dog");
}