abstract class Animal
{
abstract public void eat(); //到具體動物裏再實例化
}
class Cat extends Animal //除了Cat還可以定義各種具體的動物
{
public void eat() //實例化eat方法
{
System.out.println("貓吃");
}
public void catchMouse() //特有的catchMouse方法
{
System.out.println("抓老鼠");
}
}
class DuotaiTest
{
public static void main(String[] args)
{
Animal x=new Cat(); //自動向上轉型,無論new出什麼具體動物都提升到Animal類型
x.eat();
function(new Cat()); //和上一句執行的結果一樣,都對一個新Cat使用eat方法
}
public static void function(Animal a) //不論傳進來的a是哪種具體動物,都已經提升到Animal了
{
a.eat(); //這個具體子類裏的方法已經重寫,不同的動物進來執行不同的eat方法
//不能寫a.catchMouse();,因爲這裏a的引用是Animal類型,父類裏沒有catchMouse方法
Cat b=(Cat)a; //只能這樣把a的引用向下轉換成Cat類型,再使用catchMouse方法
b.catchMouse();
}
}
黑馬程序員 多態入門
----------------------
android培訓、java培訓、期待與您交流! ----------------------
---------------------
ASP.Net+Android+IOS開發、.Net培訓、期待與您交流! ----------------------
多態:事物存在多種體現形態
好處:提高程序的擴展性
弊端:因爲使用了父類引用,所以只能訪問父類成員,不能訪問子類特有的成員
使用前提:有繼承關係或實現關係的類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.