方法過載與方法覆寫

2021-09-10 06:47:45 字數 2008 閱讀 4108

定義:若干個方法名稱相同,引數的型別或個數不同(即引數列表不同)的方法,與方法返回值無關!

public class fangfachongzai 

public static int add (int x, int y)

// 方法過載

public static int add (int x, int y, int z)

// 又過載

public static double add (double x, double y)

}

public class fangfachongzai 

public static int add (int x, int y)

// 就光是返回值不同

編譯出錯,所以堅決不能!!!子類定義了與父類方法名稱、引數、返回值完全一樣的方法(沒提許可權!)。被覆寫的方法不能擁有比父類更嚴格的方法訪問許可權(即

子類方法許可權 >= 父類方法許可權)

class person 

}class student extends person

}public class fangfafuxie

}

這裡的 new student().print() 這句是先產生了乙個 student 類的物件,然後再呼叫 print 方法,student 類又繼承了 person 類,

所以這裡到底是會執行哪個類的 print 方法???

顯然結果是執行了 student 類的 print 方法。

結論:當前呼叫方法是通過哪個類new的並且此方法也被子類所覆寫,呼叫的一定是覆寫後的方法!!!

我們可以接著做個對比,下面的是通過 person 類產生了乙個物件。

class person 

}class student extends person

}public class fangfafuxie

}

結果就變成了執行了 person 類的 print 方法。

現在已經接觸了三種訪問控制許可權:private < default < public。那麼也就意味著如果父類使用public進行方法宣告,那麼子類必

須也使用public;如果父類使用default,那麼子類可以使用default或者public。

錯誤的覆寫:

原因:如果父類方法使用了 private 定義,那麼就表示該方法只能被父類使用,子類無法使用。換言之,子類根本就不知道父類

有這樣的方法。這個時候子類中的該方法只是子類定義的新方法而已,並沒有和父類的方法有任何關係。

結論:private方法無法被覆寫!!!

方法的覆寫和過載

在學習中 方法的覆寫和過載老是有人搞混 或者記不清他們之間的細節 方法的過載 概念 方法名稱相同,引數的個數或型別不同 不能有兩個名字相同,引數型別也相同卻返回值不同的方法 構造方法的過載 由於同乙個類中不可能有兩個屬性,名稱相同,型別不同所以構造方法的過載只能是引數的個數不同。方法覆寫 概念 子類...

java中方法的過載與覆寫的區別

方法覆寫時從private變為default不算是方法覆寫 方法覆寫名字相同,返回值型別相同,引數個數不同 也可以相同 在繼承的關係中也存在著方法覆寫的概念,子類定義了與父類中同名的方法,但是方法覆寫時必須考慮到許可權,即被子類覆寫的方法不能擁有比父類方法更加嚴格的訪問許可權。privatevoid...

Java中方法過載跟方法覆寫的區別

方法過載 定義 在同乙個類中,允許存在乙個以上的同名方法,只要他們的引數個數或者引數型別或者引數順序 引數列表 不同即可。法則 兩同,一不同 兩同 1.同乙個類中。2.方法名相同。一不同 引數列表不同 引數個數,引數型別,引數順序 和方法的返回值和修飾符無關。方法覆寫 定義 方法的覆寫是發生繼承的關...