Java語(yǔ)言中的重寫(xiě)(override)和重載(overload)
重寫(xiě)(override)和重載(overload)是編程語(yǔ)言中的兩個(gè)常見(jiàn)概念,用于描述函數(shù)或方法的特定行為。
重寫(xiě)指的是在子類中重新定義(覆蓋)父類中已經(jīng)存在的同名方法。重寫(xiě)可以修改或擴(kuò)展父類的方法實(shí)現(xiàn),使其更適合子類的需求。在重寫(xiě)中,子類方法的名稱、參數(shù)類型、返回值類型必須與父類方法完全一致。
重載指的是在同一個(gè)類中定義多個(gè)同名的方法,但它們具有不同的參數(shù)類型和/或數(shù)量。在調(diào)用這些方法時(shí),編譯器會(huì)根據(jù)傳入的參數(shù)類型和數(shù)量選擇相應(yīng)的方法進(jìn)行調(diào)用。重載方法的返回值類型可以相同也可以不同。方法的名稱必須相同,但參數(shù)列表必須有所不同。Java語(yǔ)言中的重載(overload)只能同一個(gè)類中。
一個(gè)重寫(xiě)方法的例子
假設(shè)有一個(gè)名為 "Vehicle" 的父類,其中包含一個(gè)名為 "move" 的方法。如果我們創(chuàng)建了一個(gè)名為 "Car" 的子類,并希望修改 "move" 方法的實(shí)現(xiàn),以便更好地適應(yīng)汽車的運(yùn)動(dòng)方式,那么我們可以使用重寫(xiě)在 "Car" 類中重新定義 "move" 方法。源碼如下:
//重寫(xiě)示例
class Vehicle {
public void move() {
System.out.println("The vehicle is moving.");
}
}
class Car extends Vehicle {
@Override
public void move() {
System.out.println("The car is driving on the road.");
}
}
public class TestOverride {
public static void main(String args[]){
Vehicle a = new Vehicle (); // Vehicle 對(duì)象
Vehicle b = new Car(); // Car對(duì)象
a.move();// 執(zhí)行 Vehicle 類的方法
b.move();//執(zhí)行 Car 類的方法
}
}
在這個(gè)例子中,Car 類重寫(xiě)了 Vehicle 類的 move() 方法,因此當(dāng)我們調(diào)用 Car 的 move() 方法時(shí),它將輸出 "The car is driving on the road." 而不是原來(lái)的 "The vehicle is moving."。
特別提示,@Override注解不是必需的,但建議在重寫(xiě)父類方法時(shí)使用它。
@Override注解可以省略,但不建議這樣做。如果我們?cè)谧宇愔兄貙?xiě)了父類的方法,并且使用了@Override注解來(lái)標(biāo)識(shí)這個(gè)方法,那么編譯器會(huì)在編譯時(shí)檢查該方法是否正確地覆蓋了父類中的同名方法。這可以幫助我們避免一些錯(cuò)誤。如果我們省略了@Override注解,則編譯器將無(wú)法檢查出這些錯(cuò)誤。
使用@Override注解還可以使代碼更加易讀和易維護(hù)。在閱讀代碼時(shí),我們可以很容易地看到哪些方法是重寫(xiě)了父類中的方法。
一個(gè)重載方法的例子
源碼如下:
//重載示例
class TestOverload{
public int add(int a, int b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
public String add(String a, String b) {
return a + b;
}
public static void main(String[] args){
TestOverload o = new TestOverload();
int result1 = o.add(10,20); //執(zhí)行int add(int a, int b)方法
System.out.println(result1); //30
int result2 = o.add(10,20,30); //執(zhí)行int add(int a, int b, int c)方法
System.out.println(result2); //60
String result3 = o.add("10", "20"); //執(zhí)行String add(String a, String b)方法
System.out.println(result3); //1020
}
}
在這個(gè)例子中,我們?cè)赥estOverload類中定義了三個(gè)名為 "add" 的方法。一個(gè)接收int類型2個(gè)參數(shù),一個(gè)接收int類型3個(gè)參數(shù),還有一個(gè)接收String類型參數(shù)。當(dāng)我們使用 TestOverload類的對(duì)象調(diào)用 add() 方法時(shí),編譯器會(huì)根據(jù)傳入的參數(shù)類型和數(shù)量選擇相應(yīng)的方法進(jìn)行調(diào)用。
在Java中,多態(tài)性是指同一個(gè)方法名稱可以被不同的對(duì)象調(diào)用,且能夠根據(jù)調(diào)用對(duì)象的實(shí)際類型來(lái)執(zhí)行不同的方法。方法重載和方法重寫(xiě)是Java多態(tài)性的兩種不同表現(xiàn)形式。
方法重載是指在同一個(gè)類中,可以有多個(gè)方法具有相同的名稱,但參數(shù)列表必須不同或參數(shù)類型不同。重載方法可以有不同的返回類型,只要參數(shù)列表不同即可。
而方法重寫(xiě)是指子類實(shí)現(xiàn)了與父類相同的方法名稱、參數(shù)類型和返回類型的方法。子類在重寫(xiě)方法時(shí),可以改變方法的實(shí)現(xiàn)細(xì)節(jié),但不能改變方法的名稱、參數(shù)列表和返回類型。通過(guò)方法重寫(xiě),子類可以覆蓋掉父類的方法,并使用自己的實(shí)現(xiàn)邏輯。
方法重載和方法重寫(xiě)都是Java中多態(tài)性的不同表現(xiàn),可以讓程序更加靈活和易于擴(kuò)展。
小結(jié)
重寫(xiě)(Override)是指子類使用與父類相同的方法名、返回類型和參數(shù)類型來(lái)覆蓋父類中已有的方法實(shí)現(xiàn)。當(dāng)我們需要修改父類中的方法實(shí)現(xiàn)時(shí),就需要重寫(xiě)該方法。重寫(xiě)的方法不能比原來(lái)的方法具有更嚴(yán)格的訪問(wèn)權(quán)限,因?yàn)橹貙?xiě)后的方法要能被父類類型的引用調(diào)用。重寫(xiě)是子類對(duì)父類的允許訪問(wèn)的方法的實(shí)現(xiàn)過(guò)程進(jìn)行重新編寫(xiě), 返回值和形參都不能改變。
重載(Overload)是指在同一個(gè)類中,有多個(gè)方法名稱相同但參數(shù)列表不同的方法。它們的方法名相同,但參數(shù)類型、個(gè)數(shù)或順序不同,即為重載。重載方法可以返回不同的值類型。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-437972.html
方法的重寫(xiě)和重載是Java多態(tài)性的不同表現(xiàn),方法重載是一個(gè)類的多態(tài)性表現(xiàn),而方法重寫(xiě)是子類與父類的一種多態(tài)性表現(xiàn)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-437972.html
到了這里,關(guān)于Java語(yǔ)言中的重寫(xiě)和重載的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!