W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
重新定義從超類繼承的類中的實例方法稱為方法重寫。
讓我們考慮類A和類B的以下聲明:
public class A { public void print() { System.out.println("A"); } } public class B extends A { public void print() { System.out.println("B"); } }
類B是類A的子類。類B從其超類繼承print()方法并重新定義它。
類B中的print()方法覆蓋類A的print()方法。
如果一個類覆蓋了一個方法,它會影響覆蓋的類及其子類??紤]下面的類C的聲明:
public class C extends B { // Inherits B.print() }
類C不聲明任何方法。它繼承類B中的print()方法。
類總是繼承它的直接超類的可用的。
方法必須是實例方法。重寫不適用于靜態(tài)方法。
重寫方法必須具有與重寫方法相同的名稱。
重寫方法必須具有與重寫方法相同順序的相同類型的相同數(shù)量的參數(shù)。
當方法的參數(shù)使用通用類型時,考慮通用類型參數(shù)的擦除,而不是通用類型本身與其他方法比較。
參數(shù)的名稱無關緊要。
如果重寫方法的返回類型是引用類型,則重寫方法的返回類型必須與重寫方法的返回類型兼容。
重寫方法的訪問級別必須至少與重寫方法的訪問級別相同或更寬松。
下表列出了重寫方法允許的訪問級別
重寫方法訪問級別 | 允許重寫方法訪問級別... |
---|---|
public | public |
protected | public, protected |
package-level | public, protected, package-level |
方法可以在其throws子句中包括檢查異常的列表。重寫方法無法向重寫方法中的異常列表添加新的異常。
它可以刪除一個或所有異常,或者可以用另一個異常替換異常。
從子類訪問重寫的方法。子類可以使用關鍵字 super
作為限定符來調用超類的重寫方法。
class MySuperClass { public void print() { System.out.println("Inside MySuperClass"); } } class MySubClass extends MySuperClass { public void print() { // Call print() method of MySuperClass class super.print(); // Print a message System.out.println("Inside MySubClass.print()"); } public void callOverridenPrint() { // Call print() method of MySuperClass class super.print(); } } public class Main { public static void main(String[] args) { MySubClass aoSub = new MySubClass(); aoSub.print(); aoSub.callOverridenPrint(); } }
上面的代碼生成以下結果。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: