Java怎么正確地向上轉(zhuǎn)型和向下轉(zhuǎn)型

小億
85
2024-01-26 13:07:35

在Java中,向上轉(zhuǎn)型是指將一個(gè)子類(lèi)對(duì)象賦值給一個(gè)父類(lèi)引用變量,向下轉(zhuǎn)型是指將一個(gè)父類(lèi)引用變量強(qiáng)制轉(zhuǎn)換為其子類(lèi)對(duì)象。

向上轉(zhuǎn)型示例:

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(); // 創(chuàng)建子類(lèi)對(duì)象
        Animal animal = dog; // 向上轉(zhuǎn)型,將子類(lèi)對(duì)象賦值給父類(lèi)引用變量
        animal.sound(); // 調(diào)用父類(lèi)引用變量的方法會(huì)執(zhí)行子類(lèi)的方法
    }
}

輸出結(jié)果為:

Dog barks

向下轉(zhuǎn)型示例:

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(); // 創(chuàng)建父類(lèi)引用變量指向子類(lèi)對(duì)象
        Dog dog = (Dog) animal; // 向下轉(zhuǎn)型,強(qiáng)制將父類(lèi)引用變量轉(zhuǎn)換為子類(lèi)對(duì)象
        
        dog.fetch(); // 調(diào)用子類(lèi)對(duì)象的方法
    }
}

輸出結(jié)果為:

Dog fetches

需要注意的是,向下轉(zhuǎn)型存在風(fēng)險(xiǎn),如果父類(lèi)引用變量指向的實(shí)際對(duì)象不是轉(zhuǎn)型后的類(lèi)型,會(huì)導(dǎo)致運(yùn)行時(shí)異常。因此,在進(jìn)行向下轉(zhuǎn)型時(shí),最好先使用instanceof運(yùn)算符來(lái)判斷引用變量是否可以轉(zhuǎn)型為目標(biāo)類(lèi)型,以避免運(yùn)行時(shí)異常的發(fā)生。

if (animal instanceof Dog) {
    Dog dog = (Dog) animal;
    dog.fetch();
} else {
    System.out.println("Cannot downcast to Dog");
}

0