在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");
}