久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

方法覆蓋和方法重載必須滿足的條件

 yimiludou 2021-01-05
方法覆蓋必須滿足下列條件

(1) 子類的方法的名稱及參數(shù)必須和所覆蓋的方法相同

(2) 子類的方法返回類型必須和所覆蓋的方法相同

(3) 子類方法不能縮小所覆蓋方法的訪問權(quán)限

(4) 子類方法不能拋出比所覆蓋方法更多的異常

重載方法必須滿足下列條件

(1) 方法名必須相同

(2) 方法的參數(shù)簽名必須相同

(3) 方法的返回類型和方法的修飾符可以不相同

 順便說(shuō)說(shuō)方法覆蓋和重載的區(qū)別

初次見到這兩個(gè)單詞并沒有什么特別的感覺,,但是時(shí)間長(zhǎng)了,,卻發(fā)現(xiàn)書上一會(huì)兒用override,一會(huì)兒又用overload,,搞得我的迷迷糊,。于是就做了個(gè)總結(jié),希望能對(duì)和我一樣對(duì)這兩個(gè)概念模糊不清的網(wǎng)友有一個(gè)幫助,。
override可以翻譯為覆蓋,,從字面就可以知道,它是覆蓋了一個(gè)方法并且對(duì)其重寫,,以求達(dá)到不同的作用。對(duì)我們來(lái)說(shuō)最熟悉的覆蓋就是對(duì)接口方法的實(shí)現(xiàn),,在接口中一般只是對(duì)方法進(jìn)行了聲明,,而我們?cè)趯?shí)現(xiàn)時(shí),就需要實(shí)現(xiàn)接口聲明的所有方法,。除了這個(gè)典型的用法以外,,我們?cè)诶^承中也可能會(huì)在子類覆蓋父類中的方法。在覆蓋要注意以下的幾點(diǎn):
1,、覆蓋的方法的標(biāo)志必須要和被覆蓋的方法的標(biāo)志完全匹配,,才能達(dá)到覆蓋的效果,;
2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致,;
3,、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類,;
4,、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個(gè)方法,,并沒有對(duì)其進(jìn)行覆蓋,。
overload對(duì)我們來(lái)說(shuō)可能比較熟悉,可以翻譯為重載,,它是指我們可以定義一些名稱相同的方法,,通過(guò)定義不同的輸入?yún)?shù)來(lái)區(qū)分這些方法,然后再調(diào)用時(shí),,VM就會(huì)根據(jù)不同的參數(shù)樣式,,來(lái)選擇合適的方法執(zhí)行。在使用重載要注意以下的幾點(diǎn):
1,、在使用重載時(shí)只能通過(guò)不同的參數(shù)樣式,。例如,不同的參數(shù)類型,,不同的參數(shù)個(gè)數(shù),,不同的參數(shù)順序(當(dāng)然,同一方法內(nèi)的幾個(gè)參數(shù)類型必須不一樣,,例如可以是fun(int,float),,但是不能為fun(int,int));
2,、不能通過(guò)訪問權(quán)限,、返回類型、拋出的異常進(jìn)行重載,;
3,、方法的異常類型和數(shù)目不會(huì)對(duì)重載造成影響;
4,、對(duì)于繼承來(lái)說(shuō),,如果某一方法在父類中是訪問權(quán)限是priavte,那么就不能在子類對(duì)其進(jìn)行重載,,如果定義的話,,也只是定義了一個(gè)新方法,而不會(huì)達(dá)到重載的效果,。
下面是對(duì)override和overload的測(cè)試程序,,其中注釋中的內(nèi)容都是會(huì)產(chǎn)生編譯錯(cuò)誤的代碼,,我們將注釋去掉,看看在編譯時(shí)會(huì)產(chǎn)生什么效果,。
//對(duì)overload測(cè)試的文件:OverloadTest.java
publicnewOverrideTest1();
try{
test.fun();
test.fun1();
}catch(Exceptione){}
}
}

classOverrideTest1extendsOverrideTest{
//以下正常Override
publicvoidfun()throwsTestException2{
System.out.println("funinOverrideTest1");
}

//不能Override父類中的方法,,因?yàn)樗x了不同的異常類型和
//返回值。
//publicintfun()throwsTestException1{
//System.out.println("methodfuninTest");
//return1;
//}

//不能Override父類中的方法,,因?yàn)樗鼟伋隽吮雀割愔蟹欠ǚ秶?//更大的異常,。
//publicvoidfun()throwsException{
//System.out.println("funinOverrideTest1");
//}

//這個(gè)方法并沒有Override父類中的fun1方法,因?yàn)檫@個(gè)方法在
//父類是private類型,,所以這里只是相當(dāng)于定義了一個(gè)新方法,。
publicvoidfun1(){
System.out.println("methodfun1inTest");
}
}

classTestExceptionextendsException{
publicTestException(Stringmsg){
super(msg);
}
}

classTestException1extendsTestException{
publicTestException1(Stringmsg){
super(msg);
}
}

classTestException2extendsTestException{
publicTestException2(Stringmsg){
super(msg);
}
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多