Java 方法重寫(xiě)

2018-01-18 19:24 更新

Java面向?qū)ο笤O(shè)計(jì) - Java方法重寫(xiě)

方法重寫(xiě)

重新定義從超類繼承的類中的實(shí)例方法稱為方法重寫(xiě)。

例子

讓我們考慮類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()方法。

如果一個(gè)類覆蓋了一個(gè)方法,它會(huì)影響覆蓋的類及其子類。考慮下面的類C的聲明:

public class C  extends B  {
   // Inherits B.print()
}

類C不聲明任何方法。它繼承類B中的print()方法。

注意

類總是繼承它的直接超類的可用的。

方法必須是實(shí)例方法。重寫(xiě)不適用于靜態(tài)方法。

重寫(xiě)方法必須具有與重寫(xiě)方法相同的名稱。

重寫(xiě)方法必須具有與重寫(xiě)方法相同順序的相同類型的相同數(shù)量的參數(shù)。

當(dāng)方法的參數(shù)使用通用類型時(shí),考慮通用類型參數(shù)的擦除,而不是通用類型本身與其他方法比較。

參數(shù)的名稱無(wú)關(guān)緊要。

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

訪問(wèn)級(jí)別

重寫(xiě)方法的訪問(wèn)級(jí)別必須至少與重寫(xiě)方法的訪問(wèn)級(jí)別相同或更寬松。

下表列出了重寫(xiě)方法允許的訪問(wèn)級(jí)別

重寫(xiě)方法訪問(wèn)級(jí)別允許重寫(xiě)方法訪問(wèn)級(jí)別...
publicpublic
protectedpublic, protected
package-levelpublic, protected, package-level

方法可以在其throws子句中包括檢查異常的列表。重寫(xiě)方法無(wú)法向重寫(xiě)方法中的異常列表添加新的異常。

它可以刪除一個(gè)或所有異常,或者可以用另一個(gè)異常替換異常。

訪問(wèn)重寫(xiě)方法

從子類訪問(wèn)重寫(xiě)的方法。子類可以使用關(guān)鍵字 super 作為限定符來(lái)調(diào)用超類的重寫(xiě)方法。

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();
  }
}

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)