1. 程式人生 > >java中的過載、重寫和隱藏

java中的過載、重寫和隱藏

一、過載(overload

方法過載就是一個類中定義多個同名的方法,但要求每個方法具有不同的引數型別或者不同的引數個數。過載與返回值的型別和修飾符無關

class test{
public int fun(int a){}
public string fun(string a){}
public float fun(int a,string b){}
public float fun(string a,int b){}
void string fun(float a){}
void string fun(int a){}//該方法不是過載
}


前五個方法互為過載方法,第一個和第六個不是過載方法(雖然兩個方法的返回值型別不同,但兩個方法的名字相同,引數個數和引數型別都相同)。所以過載方法的返回值型別不一定相同,方法名一定相同,引數型別或個數一定不同。

二、重寫(override

當子類繼承父類,子類中方法的名稱,引數型別,引數個數與父類中的方法都完全一致,則認為子類中的方法重寫了父類中的方法。

public class Parent {
public void fun1(int i){
/*do something...*/
}
public String fun2(){

return "parent";
}
}
public class Child extends Parent{
public void fun1(int i){
/*do other something...*/
}
public String fun2(){
return "child";
}
}

重寫的規則:

(1)重寫方法不能比被重寫方法限制更嚴格的訪問級別,即訪問許可權可以是擴大但不能縮小父類與子類的訪問許可權可以是public和public,protected和protected,protected和public,但不能是public和protected。

(2)標識為final的方法不能被重寫,靜態方法不能被重寫。

(3)重寫方法的返回型別必須與被重寫方法的返回型別相同

(4)重寫方法的引數列表必須與被重寫方法的引數列表相同。

(5)重寫方法不能丟擲新的異常,或者比被重寫方法宣告的檢查異常更廣的檢查異常,但可以丟擲更少或者不丟擲異常。

(6)抽象方法必須在具體類中被重寫。
三、隱藏()

隱藏發生在子類與父類之間,隱藏是針對父類中的成員變數和靜態方法而言。當子類聲明瞭與父類相同的變數名的變數時就實現了對父類成員變數的隱藏。當子類聲明瞭與父類的靜態成員方法中相同方法名,相同引數列表和相同返回型別的方法,則實現了對父類靜態方法的隱藏。

原則:靜態方法被隱藏,例項方法被覆蓋(重寫),父類中的成員變數能夠被子類中的同名變數隱藏,但區域性變數和形參不會被隱藏。