1.多態(tài):多種形態(tài)瓶殃,對象的多態(tài)性
class 動物{}
class 狗 extends 動物{ }
動物 x=new 狗( )副签;//狗對象既是狗類型又是動物類型。
這就是多態(tài)淆储,多態(tài)在程序中的體現(xiàn):父類的引用或者接口的引用指向子類的對象。
2.多態(tài):提供了代碼的拓展性:
public static void method(Animal a)
{ a.eat(); }
當(dāng)面對共性類型時本砰,所有子類對象都能接受。
3.多態(tài)的弊端:不能使用子類的特有方法舔株。
4.多態(tài)的前提:
A.必須要關(guān)系,繼承载慈、實現(xiàn)
B.通常有覆蓋方法
Animal a= new Dog();//向上轉(zhuǎn)型
向上轉(zhuǎn)型的好處:隱藏了子類型,提高了代碼擴展性辞做。
弊端:只能使用父類功能,不能使用子類功能凭豪。
如果不需要面對子類型晒杈,通過提高擴展性或者使用父類的功能即可以完成操作,就是用向上轉(zhuǎn)型拯钻。
6.如果想使用子類的特有功能呢?使用向下轉(zhuǎn)型粪般。(一定需要判斷)
Dog d=(Dog)a; //向下轉(zhuǎn)型
d.eat();
d.lookHome();//可以用了
7.向下轉(zhuǎn)型的好處:可以使用子類型的特有功能。
弊端:面對具體的子類型匙监,向下轉(zhuǎn)型有風(fēng)險小作,只要轉(zhuǎn)換類型和對象類型不匹配就會發(fā)生ClasscastException。
8.所以想要安全就必須要判斷顾稀,判斷一個對象是否匹配一個類型。
使用關(guān)鍵字instanceof來判斷: if(a instanceof Dog)
9子類方法覆蓋了父類方法静秆,則以子類為主。
10.接口作用:
后期每多一個設(shè)備就得多加一個功能扶认,說明設(shè)備和筆記本的耦合性太強塔沃,需要解耦蝠引。
不要每次都面對具體的類型。只要定義一個規(guī)則矫夯,讓后期的設(shè)備都符合這一個規(guī)則吊洼,這樣只要面對規(guī)則就可以使設(shè)備都符合這一個規(guī)則,這樣只要面對規(guī)則就可以了冒窍。JAVA中可以通過接口的形式來完成規(guī)則的定義,進行解耦综液。
(接口和public的需要寫文檔注釋)
以下重要
多態(tài)中隊成員的調(diào)用
A.成員變量:
無論編譯與運行,都看等號左邊的
Fu F=new fu();//看F的
B.成員函數(shù):
編譯看左邊檩奠,運行看右邊
C.靜態(tài)函數(shù):
編譯運行都看左邊
因為真正調(diào)用靜態(tài)方法不需要對象的附帽,直接類名使用,因為靜態(tài)方法是綁定到類上的蕉扮。