java中的多型

2021-07-24 23:53:37 字數 1725 閱讀 4485

多型==晚繫結

不要把函式過載理解為多型。

因為多型是一種執行期的行為,不是編譯期的行為。

多型:父型別的引用可以指向子型別的物件。

比如 parent p = new child();

當使用多型方式呼叫方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;

如果有,再去呼叫子類的該同名方法。

(注意此處,靜態static方法屬於特殊情況,靜態方法只能繼承,不能重寫override,如果子類中定義了同名同形式的靜態方法,它對父類方法只起到隱藏的作用。呼叫的時候用誰的引用,則呼叫誰的版本。)

如果想要呼叫子類中有而父類中沒有的方法,需要進行強制型別轉換,如上面的例子中,將p轉換為子類child型別的引用。

因為當用父類的引用指向子類的物件,用父類引用呼叫方法時,找不到父類中不存在的方法。這時候需要進行向下的型別轉換,將父類引用轉換為子類引用。

結合例項說明

下面舉個例子(有問題的**已注釋):

主要講講兩種型別轉換和兩種編譯時候的錯誤。  

public

class

polytest

}class

animal

}class dog extends

animal

}class cat extends

animal

public

void

eat()

}

例子的執行結果:

這段**:

cat類中定義了eat()方法,但是animal類中沒有這個方法,a1引用是animal類的,所以找不到,編譯時出錯:

(1)向上型別轉換(upcast):將子型別轉換為父型別。

對於向上的型別轉換,不需要顯示指定,即不需要加上前面的小括號和父類型別名。

(2)向下型別轉換(downcast):將父型別轉換為子型別。

對於向下的型別轉換,必須要顯式指定,即必須要使用強制型別轉換。

並且父型別的引用必須指向子類的物件,即指向誰才能轉換成誰。

不然也會編譯出錯:

因為父類引用指向的是cat類的物件,而要強制轉換成dog類,這是不可能的。

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