概念:父類引用子類物件,從而產生多種形態多型的兩種應用場景前提:二者之間必須具有直接或間接的繼承關係,父類引用可指向子類物件,進而形成多型。
注意:父類引用僅可呼叫父類中所宣告的屬性和方法,不可呼叫子類獨有的屬性和方法。
場景一:使用父類作為方法形參,實現多型。使方法的型別更為廣泛。場景二:使用父類作為方法返回值實現多型,使方法可以返回不同子類物件。
public class testpolym else
//拆箱:將父類引用中的真實子類物件轉回其本身型別
if(myvehicle instanceof car) else if (myvehicle instanceof bus) }}
/** * 這個員工類有個方法要回家
* 回家會選擇不同的交通工具,就要傳入不同的交通物件,導致耦合度高
* 但是gohome這個方法與傳入的交通工具物件是一種鬆散的關係,我選擇哪個物件都是可以的
* 這樣我們就可以選擇父類作為方法的形參,就可以選擇傳入不同的子類物件。
*/class employee
/*** 降低了耦合度
* 不然employee建立乙個類就要建立乙個傳入的引數
*/// public void gohome(car car)
/*場景二:使用父類作為返回值實現多型,使方法可以返回不同的子類物件 (員工買車新)
*/public vehicle buyvehicle(int money) else if (money >= 30)
return vehicle;
} }
//交通工具類
class vehicle
}//實體類car繼承交通工具父類
class car extends vehicle
}//實體類bus繼承交通工具父類
class bus extends vehicle
}
多型的裝箱和拆箱
向上轉型(裝箱)
父類引用中儲存真實子類物件,稱為向上轉型(即多型核心概念)。
animal a = new dog(); //小轉大
向下轉型(拆箱)
將父類引用中的真實子類物件,強轉回類本身型別,稱為向下轉型。
animal a = new dog();
dog dog = (dog)a; //大轉小
為什麼會有向下轉型?
因為我們的父類引用中明明儲存這子類物件的屬性,卻不能訪問他的屬性和方法,但是又有這種需求,此時我們就需要轉回子類真是型別,才可與呼叫子類獨有的屬性和方法。
instanceof關鍵字
向下轉型前,應判斷引用中的物件真實型別,保證轉換的真實性。語法:父類引用 instanceof 型別
返回boolean型別結果
多型的理解
1.對多型的理解 同乙個物件在不同時刻體現出來的不同狀態。簡單來說就是貓和狗都是動物,但他們又有許多不同,貓和狗是動物向下延伸的不同結果,這就是多型。2.多型的前提 a 有繼承或者實現關係。b 有方法重寫。c 有父類或者父介面引用指向子類物件。3.多型的分類 a 具體類多型 class fu cla...
多型的理解
1 同乙個物件在不同時刻體現出來的不同狀態。2 多型的前提 a 有繼承或者實現關係。b 有方法重寫。c 有父類或者父介面引用指向子類物件。多型的分類 a 具體類多型 class fu class zi extends fu fu f new zi b 抽象類多型 abstract class fu ...
多型的理解
多型 事物執行過程中存在不同的狀態 多型存在的條件 必須具有繼承關係,子類要重寫父類的方法,父類引用子類的物件 例如乙個父類animal 子類 cat 通過輸出結果可以很充分的體現了多型的三個前提 1.必須有繼承關係 cat繼承animal 2.必須重寫父類方法 子類cat重寫了父類的eat,rn,...