1. 程式人生 > >java方法的過載和重寫

java方法的過載和重寫

方法的過載

方法的過載:是在同一個類中允許同時存在一個以上的同名方法。

方法過載要求:

   1. 在同一作用範圍內(同一個類,同一個介面)

    2. 方法名相同

    3. 引數列表不同(引數個數不同、引數型別不同、引數型別順序不同 )

注意 :方法名相同,形參組成完全相同,返回型別不同不算過載,程式會報錯。

構造方法也可以過載。和成員方法的過載一樣,過載的構造方法具有不同個數或不同型別的引數,編譯器就可以根據這一點判斷出用new關鍵字產生物件時,該呼叫哪個構造方法了。

構造方法是在建立物件時被Java系統自動呼叫的,我們不能在程式中象呼叫其他方法一樣去呼叫構造方法。但我們可以在一個構造方法裡呼叫其他過載的構造方法,不是用構造方法名,而是用

this(引數列表)的形式,根據其中的引數列表,選擇相應的構造方法。

注意:在構造方法中通過this()呼叫其他構造方法必須將this()放在第一行。
          構造方法之間的呼叫不能形成一個閉環(死迴圈),必須要有一個缺口

public class Student {
	private String name;
	private String sex;
	private int age;	
	public Student() {
		System.out.println("這是一個無參構造方法");
	}
	public Student(int age) {
	         this();
		System.out.println("這是一個有一個引數構造方法");
	}
	public Student(String name,int age) {
		this(age);
		System.out.println("這是一個有兩個引數構造方法");
	}
	public Student(String name,String address,int age) {
		this(name,age);
		System.out.println("這是一個有三個引數構造方法");
	}
}

 方法的重寫:

覆蓋/重寫/覆寫:在子類中可以定義和父類中同名的方法,要求方法名相同,引數列表相同,返回值型別相同,訪問修飾符不能比父類有著更加嚴格的要求(私有的除外)

覆蓋使得在子類中可以重新定義父類中已有的方法,從而是子類具有自己的行為。

方法重寫必須滿足如下要求:

重寫方法和被重寫方法必須具有相同的方法名

重寫方法和被重寫方法必須具有相同的引數列表

重寫方法的返回值型別必須和被重寫方法的返回值型別相同或者是其子類

重寫方法的不能縮小被重寫方法的訪問許可權

注意1.父類中的私有方法是不能進行重寫的
           2.靜態方法不能被重寫,final修飾的方法也不同被重寫
           3.返回值型別可以是被覆蓋方法返回型別的子類(返回型別協變)
           4.重寫後的方法

不能比被重寫的方法有更嚴格的訪問前提條件,即子類中方法許可權必須大於等於父類該方法的許可權。

要點:1.在子類中,若要使用父類中被重寫的方法,可以使用super關鍵字進行呼叫。

           2.如果在子類中存在和父類一樣同名方法,則優先考慮子類自己的方法

           [email protected]:用來驗證方法是否是重寫的一個註解   

          4. 實現介面方法,也可稱為覆蓋(是將空的方法體覆蓋為具體的程式碼)。

class Animal{

     public void sleep(){

         System.out.println("動物愛睡覺");
   }
}
class Dog extends Animal{

     public void sleep(){

         System.out.println("狗喜歡在白天睡覺");;

   }

}
public class Test{
    public static void main(String[] args) {
         Dog d=new Dog();
         d.sleep();
    }
}