1.方法過載:發生在編譯時。方法的過載也被稱為編譯時多型,因為編譯器可以根據引數的型別來選擇使用哪個方法。
public class
如果編譯器在編譯下面的語句:
fun("my test");
它會根據傳入的引數是字串常量,生成呼叫方法1的位元組碼
2.方法覆蓋:這個是在執行時發生的。方法的覆蓋被稱為執行時多型,因為編譯期間編譯器不知道並且沒法知道該去呼叫哪個方法(因為是方法的重寫,兩個方法都一模一樣,編譯器無法分辨出該呼叫哪個方法)。jvm會在**執行的時候做出決定。
public class a
}public class b extends a
}
子類b中的compute(...)方法重寫了父類的compute(...)方法。如果編譯器遇到以下**:
public int fun(a reference,int arg2)
編譯器是沒辦法知道傳入的引數reference的型別是a還是b。因此,只能夠在執行時,根據賦給輸入變數「reference」的物件的型別(例如,是a的例項還是b的例項)來決定呼叫方法3還是方法4.
3.泛型(又稱為型別檢驗):這個是發生在編譯期間的。編譯期負責檢查程式中型別的正確性,然後把使用了泛型的**翻譯或重寫成可以執行在當前jvm上的非泛型**。這個技術被稱為「
型別擦除」。換句話說,編譯器會擦除所有尖括號裡的型別資訊,來保證更早版本的jre的相容性
listmylist = new arraylist(10);
編譯後成為了:
list mylist = new arraylit(10);
泛型之泛型方法
public class f public void f 隱式賦值,常用此方式,可以不指定 string name2 f.gett new string 泛型方法不受類的限制,也就是說,即使方法所在的類不是泛型類,也可以定義泛型方法 在泛型類中定義的方法,也不一定是泛型方法,就看你如何定義了。定義泛...
JAVA 泛型類和泛型方法(靜態方法泛型)
泛型類定義的泛型,在整個類中有效。如果被方法是用,那麼 泛型類的物件明確要操作的具體型別後,所有要操作的型別就已經固定了。為了讓不同的方法可以操作不同型別,而且型別還不確定。那麼 可以將泛型定義在方法上。泛型類class demo public void print t t class generi...
JAVA 泛型類和泛型方法(靜態方法泛型)
泛型類定義的泛型,在整個類中有效。如果被方法是用,那麼 泛型類的物件明確要操作的具體型別後,所有要操作的型別就已經固定了。為了讓不同的方法可以操作不同型別,而且型別還不確定。那麼 可以將泛型定義在方法上。泛型類class demo public void print t t class generi...