欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java重寫與重載詳解和區(qū)別

朱開管1年前6瀏覽0評論

在Java編程中,有時候需要在一個類中定義多個同名的方法,但是傳入的參數(shù)不同,或者函數(shù)體不同。這時候就需要用到Java中的重寫(Override)和重載(Overload)。

重寫(Override)

重寫是指子類對父類中已有的方法進(jìn)行重新編寫的過程。在Java中,子類可以重新定義父類中有相同名稱、相同形式參數(shù)列表和相同返回類型的方法。重寫方法應(yīng)該與原方法具有相同的訪問修飾符。當(dāng)調(diào)用一個重寫的方法時,Java虛擬機(jī)總是優(yōu)先查找對象的實際類型。如果查找到子類中存在重寫的方法則執(zhí)行子類中的方法,否則才會執(zhí)行父類中的該方法。

public class Animal {
public String move() {
return "Animal Can Move";
}
}
public class Cat extends Animal {
public String move() {
return "Cat Can Move";
}
}
public static void main(String[] args) {
Animal animal = new Animal();
Animal cat = new Cat();
System.out.println(animal.move());
System.out.println(cat.move());
}

輸出結(jié)果:

Animal Can Move
Cat Can Move

可以看出,在調(diào)用cat對象的move()方法時,由于Cat類中覆蓋了父類的move()方法,所以執(zhí)行的是Cat類中的方法。

重載(Overload)

重載是指在一個類中定義有多個方法,它們都有相同的名字,但是參數(shù)個數(shù)或參數(shù)類型不同,Java編譯器根據(jù)不同的參數(shù)類型和個數(shù)生成不同的字節(jié)碼。重載方法的返回類型可以相同,也可以不同,不能根據(jù)返回類型是否相同來判斷方法是否重載。不過,一般情況下,我們不會只通過返回類型的不同來完成重載,因為這么做是沒有意義的,Java編譯器在編譯時會根據(jù)不同的參數(shù)類型生成不同的字節(jié)碼,如果只是返回類型不同,那么它們都不會被調(diào)用。

public static void print(int i) {
System.out.println(i);
}
public static void print(int i,String s) {
System.out.println(i+" "+s);
}

這里我們定義了兩個print()方法,一個是只有一個int類型參數(shù),另一個是一個int類型參數(shù)和一個String類型參數(shù)。當(dāng)我們調(diào)用print()方法時會被正確的匹配:

print(1);//輸出1
print(1,"test");//輸出1 test

通過上面的例子,可以看到Java編譯器在選擇不同的方法時,根據(jù)傳遞的參數(shù)類型和參數(shù)個數(shù)來進(jìn)行區(qū)分。

重寫與重載的區(qū)別

  1. 重寫方法的方法名、參數(shù)列表、返回類型都必須與被重寫方法保持一致,而重載方法則只需要方法名相同,但參數(shù)列表和返回類型可以不相同。
  2. 重寫方法必須在子類中定義,而重載方法可以在同一個類中定義。
  3. 重寫方法是運行時多態(tài)性的一種表現(xiàn),而重載方法是編譯時多態(tài)性的體現(xiàn)。
  4. Java運行時是根據(jù)對象的實際類型來判斷要調(diào)用哪個方法的,而編譯時則是根據(jù)方法的參數(shù)類型和順序來判斷要調(diào)用的方法。

通過上面這些區(qū)別,我們可以更好的理解重寫和重載在Java編程中的應(yīng)用,也可以更好地使用它們來滿足我們實際的編程需求。