2015年1月27日 星期二

Java - Overloading (多載) 和 Overriding (覆寫) 介紹

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的使用可以說是無處不見。

 

 

沒有留言:

張貼留言