// 引用的多態(tài)
Animal an1 = new Animal();
Animal an2 = new Dog();// 父類(lèi)的引用指向子類(lèi)的對(duì)象
/**
* 報(bào)錯(cuò):Type mismatch: cannot convert from Animal to Dog
* 原因:子類(lèi)的引用不能指向父類(lèi)
* Dog dog = new Animal();
*/
an1.eat();
an2.eat();
Dog dog = new Dog();
Animal an = dog;// 自動(dòng)類(lèi)型提升 向上類(lèi)型轉(zhuǎn)換
/**
* 報(bào)錯(cuò):Type mismatch: cannot convert from Animal to Dog
* 原因:這里是向下類(lèi)型轉(zhuǎn)換,不能自動(dòng)轉(zhuǎn)換,需要進(jìn)行強(qiáng)制轉(zhuǎn)換
* Dog dog2 = an;
*/
/**
* 注意:編譯時(shí),根據(jù)an的地址檢測(cè)到,an所在區(qū)域原本就是Dog類(lèi)型,所以可以轉(zhuǎn)換
* Dog dog2 = (Dog)an;
*/
Dog dog2 = (Dog)an;// 向下類(lèi)型轉(zhuǎn)換 強(qiáng)制類(lèi)型轉(zhuǎn)換
/**
* 報(bào)錯(cuò): Exception in thread "main" java.lang.ClassCastException: com.jiang.Dog
* cannot be cast to com.jiang.Cat at com.jiang.Initail.main(Initail.java:20)
* Cat cat = (Cat)an;// 工具雖然不報(bào)錯(cuò),但是編譯運(yùn)行的時(shí)候會(huì)拋錯(cuò)
*/
if(an instanceof Cat){
Cat cat = (Cat)an;
}else{
System.out.print("Cat和an無(wú)法進(jìn)行類(lèi)型轉(zhuǎn)換");
}
if(an instanceof Dog){
Dog dog3 = (Dog)an;
}else{
System.out.print("Dog和an無(wú)法進(jìn)行類(lèi)型轉(zhuǎn)換");
}
運(yùn)行結(jié)果:

運(yùn)行結(jié)果