多型:可以理解為事物存在的多種體現形態
如:人:男人,女人
動物:貓,狗,鳥
貓這個動物應該是貓型別的:貓 cat = new 貓();
同時貓也是動物的一種:動物 y = new 貓(); 動物是貓和狗具體事物抽取出來的父型別,父型別指向了子類物件
1、多型的體現
父類的引用指向了自己的子類物件
父類的引用也可以接收自己的子類物件
2、多型的前提
必須是類與類之間有關係,要麼繼承,要麼實現
還有乙個前提:存在覆蓋
3、多型的好處
多型的出現大大的提高了程式的擴充套件性
4、多型的弊端
雖然提高了擴充套件性,但是只能使用父類的引用訪問父類中的成員
5、多型的應用
6、多型使用的注意事項
看乙個關於多型的例子:
1abstract
class
teacher28
}9class mathteacher extends
teacher
1015}16
class chineseteacher extends
teacher
1722
public
void
sleep()
2326}27
//將**進一步優化,定義乙個工具類,這樣就不需要例項化每乙個老師物件,直接呼叫工具類,然後把各種型別的teacher傳進去既可
28class
teachtest
2935}36
class
test
3763 }
在多型中成員函式的特點:
在編譯時期:參閱引用型變數所屬的類中是否有呼叫的方法,如果有,編譯通過,如果沒有,編譯失敗
在執行時期:參閱物件所屬的類中是否有呼叫的方法
簡單總結:成員函式在多型呼叫時,編譯看左邊,執行看右邊
(面試)在多型中成員變數,靜態成員函式的特點:
無論編譯或執行,都參考左邊(引用型變數所屬的類)
如:
1 fu f = newzi();
2 system.out.println(f.num);//
列印的是父類裡面的變數num
3 zi z = new
zi();
4 system.out.println(z.num);//
列印的是子類裡面的變數num5//
靜態的方法也是一樣。
乙個集合了介面,多型的例子
1/*2類 主機板,主機板有執行方法run()
3一段時間後想要上網 加入網絡卡類
4想要聽** 加入 音效卡類56
但是這樣乙個乙個的加入使得**的擴充套件性很差,每次都要重新修改很多**78
於是引入乙個通用的介面pci類
9所有裝置都有開啟和關閉功能
10讓網絡卡和音效卡分別取實現pci介面,重寫成自己的開啟和關閉功能
1112
給主機板加上乙個實現pcirun的方法,傳遞引數的值為pci型別的
13可以利用多型pci p = new netcard();
1415
所以在下面主函式中執行時 建立新的主機板物件以後
16mb.pcirun(new netcard());
17mb.pcirun(new soundcard());
18就可以分別使用網絡卡和音效卡了,如果以後還要再加入比如顯示卡
19就只需要建立乙個顯示卡類去實現pci介面,然後直接用主機板中的pcirun方法就可以了。
2021
*/22
class
mainboard
2328
public
void
pcirun(pci p)
2933}34
inte***ce
pci35
39class netcard implements
pci40
45public
void
close()
4649}50
class soundcard implements
pci51
56public
void
close()
5760}61
class
test
6270}71
/*72
這樣做的好處:
73大大的降低了主機板和各種獨立裝置直接的耦合性
74中間用乙個pci介面來連線起來
75程式日後非常方便擴充套件
76*/
多型中成員變數的使用特點
訪問成員變數的兩種方式 不僅是多型中,繼承也遵循這個規則 1.直接通過物件名稱訪問成員變數,看等號左邊是誰,優先用誰,沒有則向上找 例如 父類 public class fu 子類 public class ziextends fu main方法 等號左邊是父類,所以輸出父類的成員變數 public...
多型成員的特點
多型的成員特點 1 成員變數,編譯時看左邊,執行的時候看右邊 2 成員方法,編譯時看左邊,執行的時候看右邊 3 靜態方法,編譯時看左邊,執行的時候看左邊package fangfa.com public class jiekou class father public static void nam...
多型與虛函式的概念
1 多型 在物件導向方法中一般是這樣表述多型性的 向不同的物件傳送同乙個訊息,不同的物件在接收時會產生不同的行為 即方法 也可以說,多型性是 乙個介面,多種方法 2 從系統實現的角度看,多型性分為兩類 靜態多型性和動態多型性。以前學過的函式過載和運算子過載實現的多型性屬於靜態多型性,動態多型性是通過...