面向?qū)ο蟮娜齻€特性之一谆棺。多態(tài)
多態(tài):一類事物的多種表現(xiàn)形式睁搭。人:男人砸逊,女人,妖? ? 動物:阿貓赤屋,阿狗
在java中
1.重載:在一個類中一個方法功能的多種表現(xiàn)形式
重寫:父子類對于同一個方法表現(xiàn)出不同的形式
2.對象的多態(tài)性:若編譯時和運行時類型不一致立镶,就出現(xiàn)多態(tài)(Polymorphism)
java程序的編譯運行分為兩種狀態(tài):在多態(tài)的情況下
編譯時,“看左邊”类早,看的是父類的引用(父類中不具備子類特有的方法)
運行時媚媒,“看右邊”,看的是子類的對象(實際運行的是子類重復(fù)父類的方法)
向上轉(zhuǎn)型與向下轉(zhuǎn)型
引用數(shù)據(jù)類型之間的轉(zhuǎn)換:前提都先有繼承
向上轉(zhuǎn)型upcasting:子類轉(zhuǎn)父類? ? 系統(tǒng)自動完成
注意:一個引用類型變量如果聲明為父類的類型涩僻,但實際引用的是子類對象缭召,那么該變量就不能再訪問子類中添加的屬性和方法
向下轉(zhuǎn)型downcasting:父類轉(zhuǎn)子類? 需要使用強制類型轉(zhuǎn)換符()
注意:前提父類原先指向的就是本身對象才能向下轉(zhuǎn)型成功,如果父類原先指向的是其他類型(父類的逆日,兄弟類的)的對象嵌巷,那么就會發(fā)生 java.lang.CastException類型轉(zhuǎn)換異常。
instance
引用類型對象能用的運算符:
=:賦值? 引用變量=對象
==和室抽!=:比較兩個對象的地址
+:必須與String拼接
其他運算符都不能直接用于對象
唯一一個只用于引用類型的運算符:instanceof
x? instanceofA:檢驗x是否為類A的對象搪哪,返回值為boolean型
要求X所屬的類A必須是子類和父類的關(guān)系,否則編譯錯誤
如果X屬于類A的子類B坪圾,x instanceofA也為 true
多態(tài)的原則
多態(tài)的前提:1.要有繼承或者實現(xiàn)關(guān)系 2.要有方法的重寫
成員方法:
編譯時:要查看引用變量所屬的類中是否有所調(diào)用的方法晓折。
運行時:調(diào)用實際對象所屬類中的重寫方法。
成員變:
不具備多態(tài)性兽泄,只看引用變量所屬的類漓概。
屬性也會繼承到子類中,子類也可以定義和父類同名的屬性病梢。但是屬性不具備多態(tài)性垛耳,編譯與運行都只看左邊