方法的重寫(Overriding)和重載(Overloading)是Java多態性的不同表現。重寫(Overriding)是父類別與子類別之間多態性的一種表現,而重載(Overloading)是一個類別中多態性的一種表現。
如果在子類別中定義某方法與其父類別有相同的名稱和參數,我們說該方法被重寫(Overriding)。子類別的物件使用這個方法時,將呼叫子類別中的定義,對它而言,父類別中的定義如同被"屏蔽"了。
如果在一個類別中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型或有不同的參數次序,則稱為方法的重載(Overloading)。不能透過存取權限、傳回類型、拋出的例外進行重載.
1.方法重載(overload)
概念:簡單的說:方法重載就是類別的同一種功能的多種實作方式,到底採用哪一種方式,取決於呼叫者給的參數。
注意事項:
(1)方法名稱相同(2)方法的參數類型、個數、順序不至少有一項不同(3)方法返回類型可以不同(4)方法的修飾符可以不同如果只是返回類型不一樣,不能夠構成重載如果只是控制存取修飾符號不一樣,也是不能構成重載的
Overloaded的方法是可以改變傳回值的型別。
2.方法覆蓋(override)
概念:簡單的說:方法覆寫就是子類別有一個方法,和父類別的某個方法的名稱、傳回型別、參數一樣,那麼我們就說子類別的這個方法覆寫了父類別的那個方法。
注意事項:方法覆蓋有很多條件,總的講有兩點一定要注意:
(1)子類別的方法的傳回類型,參數,方法名稱,要和父類別方法的回傳類型,參數,方法名稱完全一樣,否則編譯出錯。
(2) 子類別方法不能縮小父類別方法的存取權限(反過來是可以的)
例:
Overrride實例
複製代碼代碼如下:
class A{
public int getVal(){
return(5);
}
}
class B extends A{
public int getVal(){
return(10);
}
}
public class override {
public static void main(String[] args) {
B b = new B();
A a= (A)b;//把b 強制轉換成A的型別
int x=a.getVal();
System.out.println(x);
}
}
Overload實例
package com.guonan;
//Demostrate method voerloading.
class OverloadDemo {
void test(){
System.out.println("NO parameters");
}
void test(int a){
System.out.println("a:"+a);
}//end of Overload test for one integer parameter.
void test(int a, int b){
System.out.println("a and b:"+a+" "+b);
}
double test(double a){
System.out.println("double a:"+a);
return a*a;
}
}
class Overload{
public static void main(String[] args) {
OverloadDemo ob = new OverloadDemo();
double result;
ob.test();
ob.test(10);
ob.test(10, 20);
result = ob.test(123.25);
System.out.println("Result of ob.test(123.25):"+result);
}
}