談談Java中的多型

2021-04-06 22:49:06 字數 1338 閱讀 9182

1.物件導向的程式設計有三打特點:封裝,繼承和多型;

那麼什麼是多型呢??

允許我們對物件進行不同的操作,但具體的動作卻取決於物件的型別;

這句話怎麼理解呢??以前大家都知道程式在編譯的時候,什麼函式對哪個物件執行什麼操作都已經定下來了,換句話說叫做靜態編譯,多型是動態編譯,什麼是動態編譯??動態編譯就是在程式執行的過程中根據不同物件型別有不同的繫結。

那麼多型有什麼好處呢?

明顯的一點就是可以讓前人寫的**可以呼叫後人的**,有點感到不可思異吧,這就是多型的神奇之處了,下面給出具體的例子來說明吧!!

class shape void erase() {}

}class circle extends shape

void erase()

}class square extends shape

void erase()

}class ******** extends shape

void erase() }

public class shapes

public static void main(string args) }

紅色顯示的那行**建立了circle物件,並將結果控制代碼立即賦給乙個shape。這表面看起來似乎屬於錯誤操作(將一種型別分配給另乙個),但實際是完全可行的——因為按照繼承關係,circle屬於shape的一種。裡面的關係解釋一下,可以說圓是一種圖形,但是不能說圖形是圓;因此編譯器認可上述語句,不會向我們提示一條出錯訊息。

當我們呼叫其中乙個基礎類方法時(已在衍生類裡覆蓋):

s.draw();

同樣地,大家也許認為會呼叫shape的draw(),因為這畢竟是乙個shape控制代碼。那麼編譯器怎樣才能知道該做其他任何事情呢?但此時實際呼叫的是circle.draw(),因為後期繫結已經介入(多型性)。

體會一下多型的好處:

針對從shape衍生出來的所有東西,shape建立了乙個通用介面——也就是說,所有(幾何)形狀都可以描繪和刪除。衍生類覆蓋了這些定義,為每種特殊型別的幾何形狀都提供了獨一無二的行為

2.向上轉型

大家已知道可將乙個物件作為它自己的型別使用,或者作為它的基礎型別的乙個物件使用。取得乙個物件控制代碼,並將其作為基礎型別控制代碼使用的行為就叫作「向上轉型」——因為繼承樹的畫法是基礎類位於最上方。

3.覆蓋與過載的概念

"過載」是指同一樣東西在不同的地方具有多種含義,比如繼承過程中的子類繼承了父類的方法,但是子類中卻有和父類名稱相同的方法,只是引數不同,那麼這兩個方法過載;而「覆蓋」是指它隨時隨地都只有一種含義,只是原先的含義完全被後來的含義取代了,比如繼承的過程中子類把父類中的方法重新定義了,那麼子類中的方法就覆蓋了父類中的方法

Java中的多型

多型也就是乙個名字多中狀態,這就叫多型。例如,人 老師,學生 老師和學生都是人,也就是人現在有兩種狀態。多型有四種型別 1,基本型別的多型。例如,byte,int,double,float,long。例如2,我們可以把它當作int型別,byte型別,long型別,還可以把其當作double型別。2說...

java中的多型

下面乙個例子,可以很清楚的給大家講解什麼是多型 父類 public class baseclass public void test 子類 public class subclass extends baseclass public void sub 呼叫 public static void ma...

Java中的多型

多型 某一種事物的多種存在形態 1 體現 父類引用指向子類的物件,即父類f 子類z,f fu new z 2 好處 大大提高程式擴充套件性 3 前提 必須是繼承或實現關係 且存在覆蓋 4 弊端 只能訪問父類的成員 轉型 父類引用指向子類物件時,又想要使用子類中的方法,那 麼就需要將該父類引用強轉成指...