新聞中心
方法重寫是面向?qū)ο缶幊讨械囊粋€(gè)核心概念,它允許子類重新定義父類中已經(jīng)存在的方法,這樣做可以讓子類以特定的方式實(shí)現(xiàn)方法,以滿足其自身的需求,在重寫方法的過程中,可能會(huì)遇到各種報(bào)錯(cuò),這些錯(cuò)誤的原因多種多樣,以下將詳細(xì)探討一些常見的原因。

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)寧蒗免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了超過千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
1、返回類型不匹配
在Java這樣的強(qiáng)類型語言中,重寫方法時(shí)必須保持返回類型與被重寫方法相同,如果返回類型不匹配,編譯器會(huì)報(bào)錯(cuò),如果父類中的方法返回一個(gè)Integer類型,子類重寫的方法不能返回一個(gè)int類型或者其他的類型。
class Parent {
public Integer method() {
return 1;
}
}
class Child extends Parent {
// 錯(cuò)誤的重寫,因?yàn)榉祷仡愋筒黄ヅ?
public int method() {
return 1;
}
}
2、訪問權(quán)限限制
子類重寫的方法不能擁有比父類中被重寫方法更嚴(yán)格的訪問權(quán)限,如果子類的訪問權(quán)限比父類?。ㄈ鐚ublic改為protected、default或private),這將導(dǎo)致編譯錯(cuò)誤。
class Parent {
public void method() {
// ...
}
}
class Child extends Parent {
// 錯(cuò)誤,因?yàn)樵L問權(quán)限被縮小了
protected void method() {
// ...
}
}
3、異常拋出限制
子類重寫方法時(shí),只能拋出在父類方法中聲明的異常類型的子類,不能拋出父類方法中沒有聲明的檢查異常。
class Parent {
public void method() throws IOException {
// ...
}
}
class Child extends Parent {
// 錯(cuò)誤,因?yàn)閽伋隽诵碌臋z查異常
public void method() throws Exception {
// ...
}
}
4、方法簽名不匹配
重寫要求方法名、參數(shù)列表完全一致,如果參數(shù)列表不一致,即使是參數(shù)類型不同,也會(huì)導(dǎo)致編譯錯(cuò)誤。
class Parent {
public void method(int i) {
// ...
}
}
class Child extends Parent {
// 錯(cuò)誤,因?yàn)閰?shù)類型不匹配
public void method(Integer i) {
// ...
}
}
5、靜態(tài)方法與實(shí)例方法混淆
靜態(tài)方法屬于類,而實(shí)例方法屬于類的對(duì)象,如果嘗試在子類中通過實(shí)例方法重寫父類的靜態(tài)方法,或者反之,都會(huì)導(dǎo)致編譯錯(cuò)誤。
class Parent {
public static void method() {
// ...
}
}
class Child extends Parent {
// 錯(cuò)誤,不能通過實(shí)例方法重寫靜態(tài)方法
public void method() {
// ...
}
}
6、final方法不可重寫
在父類中用final關(guān)鍵字修飾的方法表示該方法不可被繼承或重寫,如果嘗試重寫這樣的方法,編譯器將報(bào)錯(cuò)。
class Parent {
public final void method() {
// ...
}
}
class Child extends Parent {
// 錯(cuò)誤,不能重寫final方法
public void method() {
// ...
}
}
7、抽象方法未實(shí)現(xiàn)
如果父類中的方法為抽象方法,子類必須實(shí)現(xiàn)該方法,否則編譯器會(huì)報(bào)錯(cuò)。
abstract class Parent {
public abstract void method();
}
class Child extends Parent {
// 錯(cuò)誤,未實(shí)現(xiàn)抽象方法
}
8、泛型方法類型擦除
由于Java泛型的類型擦除,重寫泛型方法時(shí)可能會(huì)出現(xiàn)看似正確但實(shí)際上不匹配的情況。
class Parent {
public void method(List list) {
// ...
}
}
class Child extends Parent {
// 錯(cuò)誤,盡管看起來匹配,但由于類型擦除,實(shí)際上不正確
public void method(List list) {
// ...
}
}
方法重寫報(bào)錯(cuò)的原因多種多樣,涉及返回類型、訪問權(quán)限、異常拋出、方法簽名、靜態(tài)與實(shí)例方法的區(qū)別、final方法、抽象方法實(shí)現(xiàn)以及泛型等多個(gè)方面,理解這些規(guī)則和原理,可以幫助開發(fā)者避免在重寫方法時(shí)出現(xiàn)錯(cuò)誤。
網(wǎng)站標(biāo)題:方法重寫報(bào)錯(cuò)的原因
鏈接地址:http://m.5511xx.com/article/djocdis.html


咨詢
建站咨詢
