定義:若干個方法名稱相同,引數的型別或個數不同(即引數列表不同)的方法,與方法返回值無關!
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.方法名相同。一不同 引數列表不同 引數個數,引數型別,引數順序 和方法的返回值和修飾符無關。方法覆寫 定義 方法的覆寫是發生繼承的關...