什麼是重載?
重載(Overload)表示同一個類中可以有多個名稱相同的方法,但這些方法的參數列表各不相同。
什麼是覆蓋?
覆蓋(Override)是指子類對父類方法的一種重寫,只能比父類拋出更少的異常,訪問權限不能比父類的小,被覆蓋的方法不能是 private 的,否則只是在子類中重新定義了一個新方法。
重載的案例:
package exercise;
public class information {
public void method(String name) {
System.out.println("姓名是:"+name);
}
public void method(int age) {
System.out.println("年齡是:"+age);
}
public void method(String name,int age) {
System.out.println("姓名是:"+name);
System.out.println("年齡是:"+age);
}
public void method(int age,String name) {
System.out.println("年齡是:"+age);
System.out.println("姓名是:"+name);
}
public static void main(String[] args) {
new information().method("高飛");
new information().method(18);
new information().method("高飛",18);
new information().method(18,"高飛");
}
}
/*
運行結果:
姓名是:高飛
年齡是:18
姓名是:高飛
年齡是:18
年齡是:18
姓名是:高飛
*/
總結:使用重載能夠同時解決參數類型不同,參數個數不同的,參數順序不同的問題。
重載的規則:
- 在使用重載時只能通過相同的方法名、不同的參數形式實現。不同的參數類型可以是不同的參數類型,不同的參數個數,不同的參數順序(參數類型必須不一樣)。
- 不能通過訪問權限、返回類型、拋出的異常進行重載。
- 方法的異常類型和數目不會對重載造成影響。
覆蓋的案例:
package exercise;
public class animal {
public void run() {
System.out.println("動物會跑");
}
public void eat() {
System.out.println("動物會吃飯");
}
private void breath() {
System.out.println("動物會呼吸");
}
}
package exercise;
public class fish extends animal{
public void run() {
System.out.println("魚在水裏遊");
}
public void breath() {
System.out.println("魚在水裏呼吸");
}
}
package exercise;
public class main_x{
public static void main(String[] args) {
var f=new fish();
f.run();
f.eat();
f.breath();
}
}
/*
運行結果:
魚在水裏遊
動物會吃飯
魚在水裏呼吸
*/
總結:代碼中的animal父類中的breath方法是私有的,那麼在子類中是不能繼承這個方法的,同時在對他重寫時,也只是創建了一個新的方法,不構成覆蓋。
覆蓋的規則:
- 重寫方法的參數列表必須完全與被重寫的方法的相同,否則不能稱其爲重寫而是重載。
- 重寫方法的訪問修飾符一定要大於被重寫方法的訪問修飾符.
- 重寫的方法的返回值必須和被重寫的方法的返回一致。
- 重寫的子類只能比父類拋出更少的異常。
- 靜態方法不能被重寫,可以被重載。
來一波,推送吧!
羣號:781121386
羣名:人生苦短,我學編程
歡迎大家加入我們,一起交流技術!!!