多態,前提,特點,好處,弊端

<pre name="code" class="java">class Animal {
	public void eat() {}
}

class Dog extends Animal {
	public void eat() {
		System.out.println("Dog eat");
	}
}

class Cat extends Animal {
	public void eat() {
		System.out.println("Cat eat");
	}

	public void play() {
		System.out.println("貓捉迷藏");
	}
}

class DuoTaiDemo7 {
	public static void main(String[] args) {
		Animal a = new Dog(); //向上轉型
		a.eat();


		a = new Cat(); //向上轉型
		a.eat();
		//報錯
		//a.play();
	
		//創建子類對象
		//Cat c = new Cat();
		//c.play();
		Cat c = (Cat)a; //<span style="color:#ff0000;"><strong>向下轉型---->爲了調用子有父沒有(cat有animal沒有)的方法。此題爲了c.play()</strong></span>
		c.eat();
		c.play();
		
		//ClassCastException:類型不匹配
		a = new Dog();
		Dog d = (Dog)a;
		a.eat();

	
	}
}

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">多態:對象在不同時刻表現出來的多種狀態。</span>

舉例:
水(水蒸氣,冰,水)


動物和狗。


動物是動物,
動物是狗。


狗是狗。
狗是動物。


Java代碼的體現:

多態的前提:

多態的前提:
A:要有繼承或者實現關係。
B:要有方法的重寫。
沒有方法重寫,繼承抽象類,或者實現接口,沒有意義。
C:要有父類(父接口)引用指向子類對象。

*/




/*
多態:
編譯和運行的狀態不一致。 ******* !!!!注意:這些自我總結是針對多態的,平時的簡單繼承,還是先找子類再找父類!!!!*****
Fu f = new Fu(); //
Zi z = new Zi();  __________________________________//_____________________________________________________________________
 | |
多態的成員特點:  | |
成員變量:--------------------|--------->只找父類;若是方法中的成員變量,先找此方法所在的(子//父)類中是否有,|
編譯看左邊,運行看左邊。  | _ (有則用,無則看父有沒有//有則用,無則報錯,不能逆向去找子類了)|
成員方法(要求是重寫):      |          |  先找子類,再找父類。(方法中嵌套方法,也是先找子類再找父類)   |
編譯看左邊,運行看右邊。--|----------|  既然成員方法重寫了,肯定依照重寫的來(重寫肯定指的是子類的方法),所以看右邊。|
 | |_ 不重寫,就不符合多態了,依照原方法來,即在左邊了。|
靜態成員方法:  | |
編譯看左邊,運行看左邊。--|--------->只找父類。。靜態是與類相關,而不是對象。|
 | |
爲什麼呢?      |_________________________________________________________________________________________________________|
因爲方法有重寫,而變量沒有。
*/






/*
多態的好處:
A:維護性(是有繼承保證)
B:擴展性(當你不知道將來使用哪個子類的時候,那麼,就把這裏傳遞父類的引用。這個時候,你將來不管傳遞哪個子類,我都可以接收)

弊端:
不能使用子類的特有功能。


多態的弊端:
不能使用子類的特有功能。


我就要使用,怎麼辦呢?
A:創建子類對象。可以解決,但是不合理。
B:多態中的轉型問題
a:向上轉型
從小到大。Dog,Cat - Animal
b:向下轉型
從大到小。Animal -- Dog,Cat
必須加強制類型轉換。
*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章