[Java] Overloading (多載) 和 Overriding (覆寫)

Overloading 和 Overriding 這兩個物件導向的名詞,常常讓人剪不斷,理還亂,可是偏偏大大小小的考試又愛考,老師在說又聽不懂,對於這兩個名詞只能說是霧裡看花。

 

但是,如果寫程式只是單單考名詞,那大概程式設計師會掛一半,因為大部份的人都是會寫程式,但不知道自己已經悄悄用到物件導向內的「觀念」,所以我就用我的認知,就 Overriding 和 Overloading 做一個簡單的區分及解說,當然如果有不對的地方,還是請各位程式設計師及專家學者們,多多指教及包涵。

 

Overloading有人將他稱為「多載」,是指說在「相同類別」中,定義「名稱相同」,但是「引數個數不同」,或是「引數型態不同」的函式,這樣JAVA就可以根據引數的個數,或是引數的型態,呼叫到對應的函式。Overriding 則是覆寫掉父類別中的函式。

 

首先,先舉例一下 Overloading,而 Overloading 就以JAVA中最常見也是最常用的 Arrays 類別為例子,引數不同,但函式名稱相同為必要條件。

static int binarySearch(byte[] a, byte key);
static int binarySearch(byte[] a, int fromIndex, int toIndex, byte key);

 

 

以 Overriding 來說,舉例而言:

class Animal{
    protected int legs = 1;
    public int getLegs(){
      return legs*4;
    }
}
class Bird extends Animal{
   public int getLegs(){
       return legs*2;
   }
}

 

同樣都是有「getLegs()」這個函式,雖然「回傳值」不同,但是「回傳值的型態」均相同,這就是 Overriding,只發生在「繼承」的關係中,子類別會將父類別的函式覆蓋掉,可以看為函式的改寫。

Subscribe
Notify of
guest

3 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
石忠和
9 years ago

淺顯易懂,讚

羅覺
7 years ago

:)

羅覺
7 years ago

回傳型別也可以是回傳值的子類別喔,不一定要一樣