Java 方法重寫

2018-01-18 19:24 更新

Java面向對象設計 - Java方法重寫

方法重寫

重新定義從超類繼承的類中的實例方法稱為方法重寫。

例子

讓我們考慮類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ù)的名稱無關緊要。

如果重寫方法的返回類型是引用類型,則重寫方法的返回類型必須與重寫方法的返回類型兼容。

訪問級別

重寫方法的訪問級別必須至少與重寫方法的訪問級別相同或更寬松。

下表列出了重寫方法允許的訪問級別

重寫方法訪問級別允許重寫方法訪問級別...
publicpublic
protectedpublic, protected
package-levelpublic, 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();
  }
}

上面的代碼生成以下結果。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號