Java中的多型(一)

2021-07-29 07:05:23 字數 1692 閱讀 4291

多型:事物存在的多種體現形態;

1.多型的基本體現: 

父類的引用指向了自己的子類物件eg: animal c = new cat();

父類的引用也可以接受自己的子類物件。 

2.多型的前提:

必須是類與類之間有繼承或實現關係,

通常存在覆蓋,但體現多型性的覆蓋**必須和父類中的**功能一致

3.多型的好處:

多型的出現提高了程式的擴充套件性;

找到物件的共同所屬型別,通過操作所有型別;簡化物件的操作型別;

4.多型的弊端:

但是只能使用父類的引用訪問父類中的成員;

5.多型的轉型

animal a = new cat();型別提公升,向上轉型,把cat這個型別轉換到動物的這種型別!

如果想要呼叫cat的特有型別時,該如何操作:此時cat型別已經向上轉型為animal,

此時強制型別轉換 :cat c = (cat)a;叫做向下轉型,將本來是父類animal 型別的a轉換成子類,轉換的結果是子類物件

但是不能強制將animal轉換成cat:

不能將父類物件轉換成子類型別;能轉換的是父類引用指向自己的子類物件時,該引用可以被提公升,也可以被強制轉換

規律:多型自始至終都是子類物件在做著變化;

instanceof關鍵字,判斷是不是這個物件是不是這個型別的;

eg a instanceof cat ,判斷a這個物件是不是指向cat這個類

6.多型的規律

1,成員變數。

編譯時:參考引用型變數所屬的類中的是否有呼叫的成員變數,有,編譯通過,沒有,編譯失敗。

執行時:參考引用型變數所屬的類中的是否有呼叫的成員變數,並執行該所屬類中的成員變數。

2,成員函式(非靜態)。

編譯時:參考引用型變數所屬的類中的是否有呼叫的函式,有,編譯通過,沒有,編譯失敗。也就是說物件呼叫的方法必須是父類的方法。

執行時:參考的是物件所屬的類中是否有呼叫的函式,如果該函式是父類特有的,那就呼叫父類的方法,如果是子類特有的,

那就呼叫子類

簡單說:編譯看左邊,執行看右邊。

因為成員函式存在覆蓋特性。

3,靜態函式。

編譯時:參考引用型變數所屬的類中的是否有呼叫的靜態方法。

執行時:參考引用型變數所屬的類中的是否有呼叫的靜態方法。

簡單說,編譯和執行都看左邊。

個人認為靜態的方法也好,靜態成員變數也好,在多型中沒有任何意義,因為靜態的成員在優先於物件,他屬於這個類,

而繼承的關係在new物件的時候才確立的,所以靜態成員跟多型沒有任何關係,所以什麼引用就呼叫什麼方法,

這種呼叫靜態成員的方法當然也不是標準的,

其實對於靜態方法,是不需要物件的。直接用類名呼叫即可。

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 弊端 只能訪問父類的成員 轉型 父類引用指向子類物件時,又想要使用子類中的方法,那 麼就需要將該父類引用強轉成指...