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,只發生在「繼承」的關係中,子類別會將父類別的函式覆蓋掉,可以看為函式的改寫。
淺顯易懂,讚
:)
回傳型別也可以是回傳值的子類別喔,不一定要一樣