【寧波達內(nèi)】很多人對于Java中的多態(tài)變量并不陌生,那么你是否真的了解呢?在下面的寧波Java培訓中寧波達內(nèi)的老師就來談一談Java中的多態(tài)變量。
寧波Java培訓一、多態(tài)的表現(xiàn)形式
多態(tài)的表現(xiàn)形式有方法重載,方法改寫,多態(tài)變量和泛型。重載是一種靜態(tài)的多態(tài)性,在程序編譯時確定被調(diào)用的方法,稱為早綁定。而多態(tài)變量和改寫相結合之后,方法的調(diào)用在運行時才能確定,是動態(tài)的多態(tài)性,稱為晚綁定。
寧波Java培訓二、里氏替換原則(The Liskov Principle of Substitution)
在靜態(tài)類型語言中,在父類和子類之間的關系存在下面的現(xiàn)象
子類的實例必須擁有父類的所有數(shù)據(jù)成員;
子類的實例必須至少通過繼承(如果不是顯示地改寫)實現(xiàn)父類所定義的所有功能;
這樣,在某種條件下,如果用子類實例來替換父類實例,那么將會發(fā)現(xiàn)子類實例可以完全模擬父類的行為,二者毫無差別;
替換原則是指如果有A和B兩個類,類B是類A的子類,那么在任何情況下都可以用類B來替換類A,而外界則毫無察覺。
不是所有繼承產(chǎn)生的子類都符合替換原則,符合替換原則的子類稱為子類型。
寧波Java培訓三、靜態(tài)類型和動態(tài)類型
在靜態(tài)類型面向對象語言中,一個變量所存儲的值的類型并不等同于這個變量所聲明的類型。聲明為父類類型的變量可以包含子類的實例值。
靜態(tài)類型是指變量在聲明時所確定的類型,并且一經(jīng)聲明就不會改變;動態(tài)類型是指這個變量實際存儲的值的類型。在靜態(tài)類型的面向對象程序設計語言中,在編譯時消息傳遞表達式的合法性不是基于接收器的動態(tài)類型,而是基于接收器的靜態(tài)類型。而對象對消息的響應取決于對象的動態(tài)類型。(就是說:寫代碼的時候“點”不出該對象動態(tài)類型包含而靜態(tài)類型不包含的變量、方法;動態(tài)類型就是程序運行過程中被重新賦值為對其他對象的引用,這時候他就可以含有動態(tài)類型對象的方法了。)
寧波Java培訓四、父類對象和子類對象
子類從父類繼承了所有的屬性和方法,因此作用在父類上的方法應用在子類對象上也是合法的。由于繼承表達的是一種is a關系,即子類對象可以被視為父類的一個對象,因此可以把子類對象的引用賦給父類對象;反之,父類對象不一定是其某個特定子類的對象,因此不一定滿足is a關系,因此不能把父類對象的引用直接賦給子類對象。