JAVA之重寫與重載

方法重寫


重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫,返回值和形參都不能改變。即外殼不變,核心重寫。

重寫的好處在於子類可以根據需要,定義特定於自己的行爲。也就是說子類能根據需要實現父類的方法。

下面是一個例子: 

class Animal {
   public void barking() {
      System.out.println("Hi");
   }
}
class Dog extends Animal {
   public void barking() {
      System.out.println("Woof-Woof");
   }
}

在上面的代碼中,Dog 類重寫了其父類 Animal 的 barking() 方法。

方法重寫的主要重寫規則有:

  1. 必須有相同的參數列表和返回類型。
  2. 訪問權限不能比父類中被重寫方法的權限更低。例如,如果父類的一個方法被聲明爲public,那麼在子類中重寫此方法就不能聲明爲protected.
  3. 聲明爲final或static的方法不能被重寫。
  4. 構造方法不能重寫。
  5. 如果不能繼承一個方法,則不能重寫這個方法。

方法重載

重載(overloading) 是在一個類裏面,方法名字相同,而參數不同。返回類型可以相同也可以不同。

每個重載的方法(或者構造函數)都必須有一個獨一無二的參數類型列表。

最常用的地方就是構造器的重載。

重載規則:

  • 被重載的方法必須改變參數列表(參數個數或類型不一樣);
  • 被重載的方法可以改變返回類型;
  • 被重載的方法可以改變訪問修飾符;
  • 被重載的方法可以聲明新的或更廣的檢查異常;
  • 方法能夠在同一個類中或者在一個子類中被重載。
  • 無法以返回值類型作爲重載函數的區分標準。

例子:

public class Overloading {
    public int test(){
        System.out.println("test1");
        return 1;
    }
 
    public void test(int a){
        System.out.println("test2");
    }   
 
    //以下兩個參數類型順序不同
    public String test(int a,String s){
        System.out.println("test3");
        return "returntest3";
    }   
 
    public String test(String s,int a){
        System.out.println("test4");
        return "returntest4";
    }   
 
    public static void main(String[] args){
        Overloading o = new Overloading();
        System.out.println(o.test());
        o.test(1);
        System.out.println(o.test(1,"test3"));
        System.out.println(o.test("test4",1));
    }
}

 

提示:被重載的方法必須改變參數列表(參數個數或類型或順序不一樣)。

重寫與重載之間的區別

區別點 重載方法 重寫方法
參數列表 必須修改 一定不能修改
返回類型 可以修改 一定不能修改
異常 可以修改 可以減少或刪除,一定不能拋出新的或者更廣的異常
訪問 可以修改 一定不能做更嚴格的限制(可以降低限制)

總結

方法的重寫(Overriding)和重載(Overloading)是java多態性的不同表現,重寫是父類與子類之間多態性的一種表現,重載可以理解成多態的具體表現形式。

  • (1)方法重載是一個類中定義了多個方法名相同,而他們的參數的數量不同或數量相同而類型和次序不同,則稱爲方法的重載(Overloading)。
  • (2)方法重寫是在子類存在方法與父類的方法的名字相同,而且參數的個數與類型一樣,返回值也一樣的方法,就稱爲重寫(Overriding)。
  • (3)方法重載是一個類的多態性表現,而方法重寫是子類與父類的一種多態性表現。

overloading-vs-overriding

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章