多態(tài)

對象具有多種形態(tài)

1、引用的多態(tài)

  父類的引用可以指向本類的對象
  父類的引用可以指向子類的對象

2、方法的多態(tài)

父類的引用可以指向本類的對象
Animal obj = new Animal();
父類的引用指向子類的對象
Animal obj1 = new dog();
注意: 不可以使用一個子類的引用指向父類的對象
注意:此時的obj1 只能調(diào)用dog類中繼承自Animal類中的方法,無法調(diào)用dog類中的非繼承方法。

方法的多態(tài)
同方法名 因參數(shù)不同可以指向不同的方法

    void eat(){
    System.out.print("狗狗愛吃骨頭");
}
    void eat(int age){
    System.out.print("狗狗年級大了就吃不動了");
}

如果調(diào)用eat方法 傳入int參數(shù) 就可以得到“狗狗年級大了就吃不動了”

多態(tài)中引用類型轉(zhuǎn)換
1、向上類型轉(zhuǎn)換(隱式/自動類型轉(zhuǎn)換,是小類型到大類型的轉(zhuǎn)換)(無風(fēng)險)
2、向下類型轉(zhuǎn)換(強制類型轉(zhuǎn)換,大類型到小類型)(有風(fēng)險)
3、instanceof運算符,來解決引用對象的類型,避免類型轉(zhuǎn)換的安全性問題

    Dog dog = new dog();
    Animal animal = dog;//向上類型轉(zhuǎn)換  無風(fēng)險
   Dog dog2 = (Dog)animal; //向下(強制)類型轉(zhuǎn)換 有風(fēng)險
   Cat cat =  (Cat)animal;//eclipse無提示 但是編譯無法通過

問題是:
1、編譯時 cat類型
2、運行時 dog類型
instanceof 可以判斷

    Dog dog = new dog();
    Animal animal = dog;//向上類型轉(zhuǎn)換  無風(fēng)險
   Dog dog2 = (Dog)animal; //向下(強制)類型轉(zhuǎn)換 有風(fēng)險
if(animal instanceof cat){
   Cat cat =  (Cat)animal;//eclipse無提示 但是編譯無法通過
}else{
  System.out.print("無法進行類型轉(zhuǎn)換,轉(zhuǎn)換成cat類型");
 }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 多態(tài)2.1 多態(tài)概述多態(tài)是繼封裝、繼承之后,面向?qū)ο蟮牡谌筇匦浴,F(xiàn)實事物經(jīng)常會體現(xiàn)出多種形態(tài),如學(xué)生,學(xué)...
    葡小萄家的貓閱讀 3,395評論 1 6
  • 一.成員變量與局部變量的區(qū)別 成員變量:在類中定義,用來描述對象將要有什么(屬性)??杀槐绢惙椒ê推渌?dāng)前類有關(guān)...
    jeffierw閱讀 632評論 0 0
  • 多態(tài)就是對象的多種形態(tài),即相同的消息使得不同的類做出不同的響應(yīng)。 多態(tài)存在的三個必要條件:繼承、重寫、父類變量引用...
    予別她閱讀 486評論 0 0
  • Java的第三大特性------>多態(tài) 一、什么是多態(tài) 多態(tài)根據(jù)其字面意思就是多種形態(tài)的意思,那么在Java中的多...
    hello_mr_future閱讀 996評論 0 0
  • 一、多態(tài) 1. 概述 理解:多態(tài)可以理解為事物存在的多種體(表)現(xiàn)形態(tài)。例如:動物中的貓和狗。貓這個對象對應(yīng)的是貓...
    陳凱冰閱讀 380評論 0 1

友情鏈接更多精彩內(nèi)容