国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Java基礎之重載(Overload)與重寫(xiě)(Override)詳解

發(fā)布時(shí)間:2021-07-17 21:51 來(lái)源:腳本之家 閱讀:0 作者:又是編程小白的一天 欄目: 編程語(yǔ)言 歡迎投稿:712375056

目錄

一、重載(Overload)

重載是在一個(gè)類(lèi)里面,方法名字相同,而參數不同。返回類(lèi)型可以相同也可以不同。

每個(gè)重載的方法(或者構造函數)都必須有一個(gè)獨一無(wú)二的參數類(lèi)型列表。

最常用的地方就是構造器的重載。

重載的好處:

1.不用為了對不同的參數類(lèi)型或參數個(gè)數,而寫(xiě)多個(gè)函數。

2.多個(gè)函數用同一個(gè)名字,但參數表,即參數的個(gè)數或(和)數據類(lèi)型可以不同,調用的時(shí)候,雖然方法名字相同,但根據參數表可以自動(dòng)調用對應的函數。

3.重載的最直接作用是方便了程序員可以根據不同的參數個(gè)數,順序,類(lèi)型,自動(dòng)匹配方法,減少寫(xiě)過(guò)個(gè)函數名或方法名的重復步驟。

4.增加代碼可讀性,執行同樣功能但具有不同參數類(lèi)型的方法應該使用同樣的名字。

重載規則:

1.被重載的方法必須改變參數列表(參數個(gè)數或類(lèi)型不一樣)。

2.被重載的方法可以改變返回類(lèi)型。

3.被重載的方法可以改變訪(fǎng)問(wèn)修飾符。

4.被重載的方法可以聲明新的或更廣的檢查異常。

5.方法能夠在同一個(gè)類(lèi)中或者在一個(gè)子類(lèi)中被重載。

6.無(wú)法以返回值類(lèi)型作為重載函數的區分標準。

歧義調用:

public class TestMethodOverload {
    public static double max(double num1,double num2) {
        if(num1 > num2)
            return num1;
        else
            return num2;
    }
    public static int max(int num1,int num2) {
        if(num1 > num2)
            return num1;
        else
            return num2;
    }
    public static void main(String[] args) {
        System.out.println("The max of 3 and 4 is "+max(3,4));
        //調用max(int num1,int num2)方法
        System.out.println("The max of 3.0 and 4.0 is "+max(3.0,4.0));
        //調用max(double num1,double num2)方法
        System.out.println("The max of 3 and 4.0 is "+max(3,4.0));
        //調用max(double num1,double num2)方法,調用方法時(shí)實(shí)參值3會(huì )轉換為double型
    } 
}

調用max(3,4)時(shí)為什么不用max(double num1,double num2)方法呢?

​ 調用方法時(shí),有時(shí)會(huì )有一個(gè)或多個(gè)可能的匹配,java編譯器會(huì )尋找最精確匹配的方法。方法max (int num1,int num2)比max(double num1,double num2)更精確。

有時(shí)調用一個(gè)方法時(shí),會(huì )有兩個(gè)或更多可能的匹配,但是編譯器無(wú)法判斷哪個(gè)是最精確的匹配。這稱(chēng)為歧義調用(ambiguous invocation)。歧義調用會(huì )產(chǎn)生一個(gè)編譯錯誤。

public class TestMethodOverload {
    public static double max(double num1,int num2) {
        if(num1 > num2)
            return num1;
        else
            return num2;
    }
    public static double max(int num1,double num2) {
        if(num1 > num2)
            return num1;
        else
            return num2;
    }
    public static void main(String[] args) {
        System.out.println("The max of 3 and 4 is "+max(3,4));
        //無(wú)法判斷用哪個(gè)方法,編譯錯誤
    } 
}

二、重寫(xiě)(Override)

重寫(xiě)是子類(lèi)對父類(lèi)的允許訪(fǎng)問(wèn)的方法的實(shí)現過(guò)程進(jìn)行重新編寫(xiě), 返回值和形參都不能改變。

重寫(xiě)的好處在于子類(lèi)可以根據需要,定義特定于自己的行為。 也就是說(shuō)子類(lèi)能夠根據需要實(shí)現父類(lèi)的方法。

重寫(xiě)方法不能拋出新的檢查異?;蛘弑缺恢貙?xiě)方法申明更加寬泛的異常。

class People{
    public void speak(){
        Systom.out.println("可以說(shuō)話(huà)");
    }
}

class ChinaPeople extends People{
    public void speak(){
        System.out.println("可以說(shuō)中文");
    }
    public void color(){
        System.out.println("皮膚為黃色");
    }
}

public class Test{
    public static void main(String[] args){
        People a = new People();//People對象
    	People b = new ChinaPeople();//ChinaPeople對象
    
   		a.speak();//執行People類(lèi)的方法
    	b.speak();//執行ChinaPeople類(lèi)的方法
    	b.color(); 
    }
}

方法的重寫(xiě)規則:

1.參數列表與被重寫(xiě)方法的參數列表必須完全相同。

2.返回類(lèi)型與被重寫(xiě)方法的返回類(lèi)型可以不相同,但是必須是父類(lèi)返回值的派生類(lèi)。

3.訪(fǎng)問(wèn)權限不能比父類(lèi)中被重寫(xiě)的方法的訪(fǎng)問(wèn)權限更低。

4.父類(lèi)的成員方法只能被它的子類(lèi)重寫(xiě)。

5.聲明為 final 的方法不能被重寫(xiě)。

6.聲明為 static 的方法不能被重寫(xiě),但是能夠被再次聲明??捎?父類(lèi)名.靜態(tài)方法名 來(lái)調用父類(lèi)的static方法。

7.子類(lèi)和父類(lèi)在同一個(gè)包中,那么子類(lèi)可以重寫(xiě)父類(lèi)除了聲明為 private 和 final 的所有方法。

8.子類(lèi)和父類(lèi)不在同一個(gè)包中,那么子類(lèi)只能夠重寫(xiě)父類(lèi)的聲明為 public 和 protected 的非 final 方法。

9.重寫(xiě)的方法能夠拋出任何非強制異常,無(wú)論被重寫(xiě)的方法是否拋出異常。但是,重寫(xiě)的方法不能拋出新的強制性異常,或者比被重寫(xiě)方法聲明的更廣泛的強制性異常,反之則可以。(如果想在子類(lèi)中拋出某強制性異常(編譯型異常),父類(lèi)中必須拋出這個(gè)異?;蚋鼜V的異常)

10.構造方法不能被重寫(xiě)。

11.如果不能繼承一個(gè)類(lèi),則不能重寫(xiě)該類(lèi)的方法。

super關(guān)鍵字:

當需要在子類(lèi)中調用父類(lèi)的被重寫(xiě)方法時(shí),要使用 super 關(guān)鍵字。

class People{
    public void speak(){
        Systom.out.println("可以說(shuō)話(huà)");
    }
}

class ChinaPeople extends People{
    public void speak(){
        System.out.println("可以說(shuō)中文");
    }
}

public class Test{
    public static void main(String[] args){
    	People a = new ChinaPeople();//ChinaPeople對象
    
   		super.speak();//執行People類(lèi)的方法
    	b.speak();//執行ChinaPeople類(lèi)的方法
    }
}

三、重寫(xiě)與重載之間的區別

四、總結

方法的重寫(xiě)(Override)和重載(Overload)是java多態(tài)性的不同表現,重寫(xiě)是父類(lèi)與子類(lèi)之間多態(tài)性的一種表現,重載可以理解成多態(tài)的具體表現形式。

1.方法重載是一個(gè)類(lèi)中定義了多個(gè)方法名相同,而他們的參數的數量不同或數量相同而類(lèi)型和次序不同,則稱(chēng)為方法的重載(Overload)。

2.方法重寫(xiě)是在子類(lèi)存在方法與父類(lèi)的方法的名字相同,而且參數的個(gè)數與類(lèi)型一樣,返回值也一樣的方法,就稱(chēng)為重寫(xiě)(Override)。

3.方法重載是一個(gè)類(lèi)的多態(tài)性表現,而方法重寫(xiě)是子類(lèi)與父類(lèi)的一種多態(tài)性表現。

到此這篇關(guān)于Java基礎之重載(Overload)與重寫(xiě)(Override)詳解的文章就介紹到這了,更多相關(guān)Java重載與重寫(xiě)內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

ja
成人国产一区二区三区香蕉| 免费无码又黄又爽又刺激| 国内精品一线二线三线黄| G国产精品无马| 国产XXXⅩ野性XXXXHD| 女女同性AV片在线观看免费|