網(wǎng)站開發(fā)實(shí)驗(yàn)報(bào)告可行性分析簡單網(wǎng)站建設(shè)優(yōu)化推廣
多態(tài)
概念
-
多態(tài)是同一個(gè)對(duì)象,在不同時(shí)刻表現(xiàn)出來不同的形態(tài),稱之為多態(tài)。
- 例如:水,我們把水理解成為一個(gè)對(duì)象,而水會(huì)有不同的形態(tài),比如 液態(tài)水、冰塊、水蒸氣
-
多態(tài)的前提
- 有繼承/實(shí)現(xiàn)關(guān)系(繼承是類和類之間的關(guān)系,實(shí)現(xiàn)是類和接口直接的關(guān)系)
- 有方法重寫(繼承之后,要對(duì)方法進(jìn)行重寫)
- 有父類的引用指向子類的對(duì)象。例如:Animal a = new Cat();
-
多態(tài)成員的訪問特點(diǎn)(非常重要,一定得理解,請先看口訣,再結(jié)合圖片下方注意文字,和圖片理解)
-
口訣(父類是左邊,子類是右邊):
- 對(duì)于成員變量,編譯看左邊,執(zhí)行看左邊
- 對(duì)于成員方法,編譯看左邊,執(zhí)行看右邊
注意:
? ①:先解釋下口訣,編譯看左邊,也就是看左邊有無這個(gè)成員,有的話編譯才通過,我們可以看到圖片一和圖片二兩張都是因?yàn)樽筮吀割愔袩o 爆紅的這個(gè)成員,所以報(bào)錯(cuò)
? ②:對(duì)于成員變量,編譯看左邊(也就是看左邊父類中有無這個(gè)成員,有的話編譯通過),執(zhí)行看左邊(我們看第三張圖,可以看到最中運(yùn)行的結(jié)果是左邊父類中的成員變量值)
? ③:對(duì)于成員方法,編譯看左邊(也就是看左邊父類中有無這個(gè)成員,有的話編譯通過),執(zhí)行看右邊(我們看第三張圖,可以看到最中運(yùn)行的結(jié)果是右邊子類中的成員方法,因?yàn)榉椒ㄖ貙懥?
-
多態(tài)的好處和弊端
-
好處:提高了程序的擴(kuò)展性,定義方法的時(shí)候,使用父類作為參數(shù),將來在使用的時(shí)候使用具體的子類參與操作
-
弊端:不能使用子類特有的功能(必須父類中有【回想口訣,只有編譯通過才行】)
多態(tài)的轉(zhuǎn)型
-
多態(tài)的弊端是,不能使用子類特有的功能,怎么辦呢?就提出我們多態(tài)的轉(zhuǎn)型。
類型 方向 向上轉(zhuǎn)型 從子到父 父類引用指向子類對(duì)象 Animal a = new Cat(); 向下轉(zhuǎn)型 從父到子 父類引用轉(zhuǎn)為子類對(duì)象 Cat b = (Cat)a 注意:向下轉(zhuǎn)型,有個(gè)前提,得是同一種對(duì)象
? Animal a = new Cat(); // a 是Animal類型,但是本質(zhì)是 貓
? Dog d = (Dog)a; // 很明顯這行就錯(cuò)了,(Dog)a 相當(dāng)于強(qiáng)轉(zhuǎn),但是 貓?jiān)趺茨苻D(zhuǎn)成狗呢!
// 動(dòng)物類 class Animal{public void show(){System.out.println("動(dòng)物!");} } // 狗類 class Dog extends Animal{public void show(){System.out.println("狗!");}public void speak(){System.out.println("汪汪");} } // 貓類 class Cat extends Animal{public void show(){System.out.println("貓!");}public void eat(){System.out.println("小魚干");} }public class Test {public static void main(String[] args) {// 向上轉(zhuǎn)型Animal a = new Cat();Animal b = new Dog();// 調(diào)用方法(父類對(duì)象調(diào)用,多態(tài)的形式,記得口訣)a.show();b.show();// 編譯不通過,因此爆紅 /* a.speak();a.eat();*/// 向下轉(zhuǎn)型Cat c = (Cat)a;Dog d = (Dog)b;// 調(diào)用方法(子類對(duì)象調(diào)用)c.eat();c.show();d.speak();d.show();/* Cat c1 = (Cat)b;c1.speak();*/} }
-
多態(tài)很重要,一定要理解!!!
-
其他兩大特征可參考下面這兩篇文章:
-
面向?qū)ο蟮娜筇卣髦焕^承
-
面向?qū)ο蟮娜筇卣髦环庋b
-