Java中重載(Overloading)與重寫(Overriding)的區別

重載(Overloading)

一、重載(Overloading)是讓類以統一的方式處理不一樣類型數據的一種手段。多個同名函數同時存在,具備不一樣的參數個數/類型。編程

二、重載(Overloading)是一個類中多態性的一種表現。Java的方法重載,就是在類中能夠建立多個方法,它們具備相同的名字,但具備不一樣的參數和不一樣的定義。ide

     調用方法時經過傳遞給它們的不一樣參數個數和參數類型來決定具體使用哪一個方法, 這就是多態性。函數

三、重載(Overloading)的時候,方法名要同樣,可是參數類型和個數不同,返回值類型能夠相同也能夠不相同。沒法以返回型別做爲重載函數的區分標準。this

 1 /*
 2 這是這個程序的第一種編程方法,在main方法中先建立一個Dog類實例,而後在Dog類的構造方法中利用this關鍵字調用不一樣的bark方法。
 3 不一樣的重載方法bark是根據其參數類型的不一樣而區分的。
 4 */
 5 
 6 public class Dog {
 7     public Dog() {
 8         this.bark();
 9     }
10     
11     void bark() {
12         System.out.println("no barking!");
13         this.bark("female", 3.4);
14     }
15     void bark(String m, double l) {    //注意:重載的方法的返回值都是同樣的
16         System.out.println("a barking dog!");
17         this.bark(5, "China");
18     }
19     void bark(int a, String n) {    //不能以返回值區分重載方法,而只能以「參數類型」和「類名」來區分
20         System.out.println("a howling dog");
21     }
22     
23     public static void main(String[] args)
24     {
25          Dog dog = new Dog();
26          //dog.bark();
27          //dog.bark("male", "yellow");
28          //dog.bark(5, "China");
29     }
30 }

輸出結果:spa

no barking!
a barking dog!
a howling dogcode

重寫(Overriding)

一、 父類與子類之間的多態性,對父類的函數進行從新定義。方法重寫又稱方法覆蓋。若是在子類中定義某方法與其父類有相同的名稱和參數,咱們說該方法被重寫 (Overriding)。blog

      在Java中,子類可繼承父類中的方法,而不須要從新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想做必定的修改,這就須要採用方法的重寫。繼承

二、若子類中的方法與父類中的某一方法具備相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。io

      如需父類中原有的方法,可以使用super關鍵字,該關鍵字引用了當前類的父類。class

三、子類函數的訪問修飾權限不能少於父類的。

 1 public class Father {
 2     
 3     Father() {
 4         this.speak();
 5     }
 6     
 7     public void speak() {
 8         System.out.println("Father speak");
 9     }
10     
11     public static void main(String[] args) {
12         Son son = new Son();
13         son.speak();
14     }
15     
16 }
17 
18 class Son extends Father {
19     
20     Son() {
21         super.speak();    //調用父類的構造函數,而後調用父類speak方法
22     }
23     
24     @Override
25     public void speak() {
26         System.out.println("Son speak");
27     }
28     
29 }

輸出結果:

Son speak
Father speak
Son speak

重載(Overloading)與重寫(Overriding)規則上的區別

重載(Overloading)的規則:

一、必須具備不一樣的參數列表;

二、能夠有不一樣的返回類型,只要參數列表不一樣就能夠了;

三、能夠有不一樣的訪問修飾符;

四、能夠拋出不一樣的異常;

 

重寫(Overriding)的規則

一、參數列表必須徹底與被重寫的方法相同,不然不能稱其爲重寫而是重載。

二、返回的類型必須一直與被重寫的方法的返回類型相同,不然不能稱其爲重寫而是重載。

三、訪問修飾符的限制必定要大於被重寫方法的訪問修飾符(public>protected>default>private)

四、重寫方法必定不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常。例如:

父類的一個方法申明瞭一個檢查異常IOException,在重寫這個方法是就不能拋出Exception,只能拋出IOException的子類異常,能夠拋出非檢查異常。

相關文章
相關標籤/搜索