java方法的神奇修改(重寫)

K&D發表於2020-12-20

java方法的重寫

我們知道方法有過載,但是今天我來說卻與過載大不相同,你沒看錯,它就是方法的重寫。它的定義是:在子類中可以根據需要從父類中繼承的方法進行改造,也稱方法的重置,覆蓋。在執行時,子類的方法將覆蓋父類的方法。
方法重寫的應用:重寫後,當建立子類的物件後,通過子類物件呼叫父類中同名同參的方法時,實際執行的是子類重寫父類的方法。(通俗的講就是,繼承完了後,再對其進行重寫,該方法就不全與父類相同了)

一.方法重寫的規定(我先在這裡說明了需要注意的點,後面會進行實踐舉例)
1.子類中重寫的方法的方法名和形參列表與父類被重寫的方法的方法名和形參列表相同。
2.子類重寫的方法的許可權修飾符要大於等於父類中的許可權修飾符(可以理解為前浪更比後浪強,不強也得一樣叭)
3.子類中不可重寫父類中宣告為private的方法
4.返回值的型別:
若父類被重寫成為void型別的,則子類重寫的方法也必須為void。
若父類被重寫成A類,則子類重寫的方法可以為A類,也可以為A類的子類。
5.父類被重寫的型別為基本資料型別,則子類重寫也必須是同一資料型別
(無自動提升!!!)

二.方法重寫的使用
直接程式碼說話:
首先建立一個父類:

public class hero{
    int age;
    String name;
    boolean ismale;
    public hero(){
    }
    public hero(String name1, String abi){
        System.out.println(name1+"的能力是"+abi);
    }
    public void achievement(){
            System.out.println("我外星人幹掉了");
    }
}

再建立個子類:

public class superman extends hero {
    String wuqi;
    public superman(){
    }
    public void achievement(){
            System.out.println("我已經幹掉100個外星人了");
    }
    public void destesr(String wuqi){
        this.wuqi=wuqi;
    }
}

最後new物件:

public class ishero {
    public static void main(String[] args) {
        hero me=new hero();
        me.achievement();
        superman king=new superman();
        king.achievement();
    }
}

我們發現最後輸出的結果為:
我外星人幹掉了
我已經幹掉100個外星人了
子類繼承完父類後對其中某些方法進行修改了,那麼該類以及其子類也會被改寫,這就是重寫。(注意:方法)

三.最後的小小說明
1.異常型別:子類重寫的方法丟擲異常型別不大於父類被重寫的方法丟擲的異常型別。
2.由於子類與父類中的同名同參的方法要麼宣告為非static的要麼宣告為static的,故二者必有其一,但是我們需要注意的是當其宣告為static時,就已經不是重寫了。

相關文章