對(duì)象具有多種形態(tài)
1、引用的多態(tài)
父類(lèi)的引用可以指向本類(lèi)的對(duì)象
父類(lèi)的引用可以指向子類(lèi)的對(duì)象
2瓤荔、方法的多態(tài)
父類(lèi)的引用可以指向本類(lèi)的對(duì)象
Animal obj = new Animal();
父類(lèi)的引用指向子類(lèi)的對(duì)象
Animal obj1 = new dog();
注意: 不可以使用一個(gè)子類(lèi)的引用指向父類(lèi)的對(duì)象
注意:此時(shí)的obj1 只能調(diào)用dog類(lèi)中繼承自Animal類(lèi)中的方法颠印,無(wú)法調(diào)用dog類(lèi)中的非繼承方法赌渣。
方法的多態(tài)
同方法名 因參數(shù)不同可以指向不同的方法
void eat(){
System.out.print("狗狗愛(ài)吃骨頭");
}
void eat(int age){
System.out.print("狗狗年級(jí)大了就吃不動(dòng)了");
}
如果調(diào)用eat方法 傳入int參數(shù) 就可以得到“狗狗年級(jí)大了就吃不動(dòng)了”
多態(tài)中引用類(lèi)型轉(zhuǎn)換
1猜扮、向上類(lèi)型轉(zhuǎn)換(隱式/自動(dòng)類(lèi)型轉(zhuǎn)換,是小類(lèi)型到大類(lèi)型的轉(zhuǎn)換)(無(wú)風(fēng)險(xiǎn))
2谭梗、向下類(lèi)型轉(zhuǎn)換(強(qiáng)制類(lèi)型轉(zhuǎn)換忘晤,大類(lèi)型到小類(lèi)型)(有風(fēng)險(xiǎn))
3、instanceof運(yùn)算符激捏,來(lái)解決引用對(duì)象的類(lèi)型设塔,避免類(lèi)型轉(zhuǎn)換的安全性問(wèn)題
Dog dog = new dog();
Animal animal = dog;//向上類(lèi)型轉(zhuǎn)換 無(wú)風(fēng)險(xiǎn)
Dog dog2 = (Dog)animal; //向下(強(qiáng)制)類(lèi)型轉(zhuǎn)換 有風(fēng)險(xiǎn)
Cat cat = (Cat)animal;//eclipse無(wú)提示 但是編譯無(wú)法通過(guò)
問(wèn)題是:
1、編譯時(shí) cat類(lèi)型
2远舅、運(yùn)行時(shí) dog類(lèi)型
instanceof 可以判斷
Dog dog = new dog();
Animal animal = dog;//向上類(lèi)型轉(zhuǎn)換 無(wú)風(fēng)險(xiǎn)
Dog dog2 = (Dog)animal; //向下(強(qiáng)制)類(lèi)型轉(zhuǎn)換 有風(fēng)險(xiǎn)
if(animal instanceof cat){
Cat cat = (Cat)animal;//eclipse無(wú)提示 但是編譯無(wú)法通過(guò)
}else{
System.out.print("無(wú)法進(jìn)行類(lèi)型轉(zhuǎn)換闰蛔,轉(zhuǎn)換成cat類(lèi)型");
}