Overloading 和 Overriding 都是OOP中相當重要的概念,
很多時我們在coding的時候都會使用到這兩個概念,例如
call 一個 string indexOf() method 或是 charAt() method
都是使用緊Overloading的概念。
Overloading 多載
- 指在一個類別(class)中,定義多個 相同名稱 ,
但 參數(Parameter) 不同 的函式(Method)。
在JAVA內置的String 類別中,擁有多個相同名稱的class method,例如
public int indexOf(int ch)
public int indexOf(int ch, int fromIndex)
int indexOf(String str)
int indexOf(String str, int fromIndex)
- 以上四個函式都有相同名稱叫作 indexOf , 可是他們當中的Parameter就不同了,
這就是所謂的Overloading多載了。
- Parament 是指在method 名稱後面用( ) 包住的變量,
例如 public int indexOf(int ch, int fromIndex)函式中,
ch 和 fromIndex 便是Parameter了。
用途:當我們想調用indexOf這個函式,可以pass不同的argument(引數) 去調用不
同的indexOf函式, 因為JAVA懂得自己根據argument呼叫對應的函式,舉個例子,
String str = "abc";
int result1 = str.indexOf('a'); // 將會調用 public int indexOf(int ch) 函式
int result2 = str.indexOf("c", 1); // 將會調用int indexOf(String str, int fromIndex) 函式
註:
argument是指當我們 invoking a method 的時候, 我們給予method的
一個 value of desired data type 或 一個 object reference 。
在上面的例子,‘a', "c" 和 1 就分別是char, string and int date type的引數 (argument) 。
Overriding (覆寫)
- 指一個子類別將會extends(繼承) 父類別,並改寫父類別已定義好的method。
- 在Overriding的過程中,argument, parameter, method name, return type都必須相同,
但return的值就可以不同了。
舉個例子:
class shape{
public double getArea(int length, int height){
return length*height;
}
}
class triangle extends shape{
public double getArea(int length, int height){
return (length*height)/2;
}
}
- 在此,類別triangle繼承了父類別shape,並共同擁有getArea() method,
只是return value不同,但return type 都是double。
用途:Overriding可以在不改動父類別一早寫好的method下,通過extends方式,
從而獲取父類別的method,作出所需的改動,從而獲得不同的result。
在Android的開發中,Overriding的使用可以說是無處不見。
沒有留言:
張貼留言