java的編譯時多型和執行時多型

2021-09-01 18:21:49 字數 1096 閱讀 9878

1、執行時多型和編譯時多型的區別?

編譯時的多型,是指引數列表的不同, 來區分不同的函式, 在編譯後, 就自動變成兩個不同的函式名. 在執行時談不上多型

執行時多型:用到的是後期繫結的技術, 在程式執行前不知道,會呼叫那個方法, 而到執行時, 通過運算程式,動態的算出被呼叫的位址. 動態呼叫在繼承的時候,方法名 引數列表完全相同時才出現執行時多型!

執行時多型,也就是動態繫結,是指在執行期間(而非編譯期間)判斷所引用物件的實際型別,根據實際型別判斷並呼叫相應的屬性和方法.看看下面這個例子:

abstract class animal

/*public void enjoy()

*/public abstract void enjoy();//該方法沒有實現的必要(所以我們一般宣告為靜態方法),但有定義的必要.

}class cat extends animal

public void enjoy()

//public abstract void enjoy();//如果不想實現父類靜態方法,可將此方法宣告為靜態的,該類也同時為abstract

}class dog extends animal

public void enjoy()

}class bird extends animal

public void enjoy()

}class lady

public void mypetenjoy()

}public class test

}動態繫結的底層實現是指標,我們知道程式中的方法是一段**,存放在專門的記憶體區域中(code segment---**區),當我們在程式執行期間new 出乙個物件後呼叫enjoy方法的時候,jvm動態的把指標指向實際的物件重寫的方法,從而實現了動態繫結.

動 態繫結的最大好處就是給我們的程式的可擴充套件性帶來了相當大的提高(上面的例子中我們可以繼續新增子類或是在main方法中new  lady,),如果沒有動態繫結,我們一般情況下的做法是在子類中用instanceof判斷乙個物件是不是我們需要的當前具體物件,但當我們定義好多個 子類的時候,每次都要判斷,現在有了動態繫結,我們不需要再去判斷,而是jvm動態給我們指向具體的物件並呼叫相應的屬性和方法.

Java編譯時多型和執行時多型

編譯時多型 主要是方法的過載,通過引數列表的不同來區分不同的方法。執行時多型 也叫作動態繫結,一般是指在執行期間 非編譯期間 判斷引用物件的實際型別,根據實際型別判斷並呼叫相應的屬性和方法。主要用於繼承父類和實現介面時,父類引用指向子類物件。例如 public class polymorphismt...

java 異常的執行時 編譯時應用

執行時 應用一 描述長方形 要考慮程式的問題,傳入的引數不符合要求 package exception 執行時異常的應用 描述長方形 行為 表達自己的長和寬 要考慮一旦引數傳入不符合要求程式直接結束 class noedge extends runtimeexception noedge strin...

java中的編譯時異常和執行時異常

首先區分一下 編譯時異常和執行時異常 執行時異常,也就是extends runtimeexception的異常編譯時不用try catch 和throws 編譯時異常,也就是extends exception 的異常需要在呼叫時try catch 或throws package syntax 異常測...