12 方法的重寫(override)

什麼是重寫?

重寫,也叫做覆蓋,當父類中的方法無法滿足子類需求時,子類可以將父類的方法進行重寫編寫來滿足需求。比如孩子繼承了父親的房子,可以將房子重新裝修。

方法重寫的條件:

1 兩個類必須是繼承關係
2 必須具有相同的方法名,相同的返回值類型,相同的參數列表.
3 重寫的方法不能比被重寫的方法擁有更低的訪問權限。
4 重寫的方法不能比被重寫的方法拋出更寬泛的異常。(關於異常後面的章節再講。)
5 私有的方法不能被重寫。
6 構造方法無法被重寫,因爲構造方法無法被繼承。
7 靜態的方法不存在重寫。
8 重寫指的是成員方法,和成員變量無關。

先定義一個動物類

class Animal {

    public void eat() {                
        System.out.println("吃飯");
    }

    public void sleep() {            
        System.out.println("睡覺");
    }
}

定義一個Cat類繼承Animal

class Cat extends Animal {

    public void eat() {                
        System.out.println("吃貓糧");//貓喜歡吃貓糧
    }
}

定義一個Dog類繼承Animal

class Dog extends Animal {

    public void eat() {                
        System.out.println("吃狗糧");//狗喜歡吃狗糧
    }
}

Animal測試類

public class AnimalTest01 {
    public static void main(String[] args) {
        Cat c = new Cat();
        c.eat();

        Dog d = new Dog();
        d.eat();
    }
}

上代碼中的Cat類和Dog類在調用父類Animal中的eat方法時已經不能很好的滿足自身的需求了,所以都將eat類進行了重寫。

靜態的方法不存在重寫

public class Test01{

    public static void main(String[] args){

        A.m1();
        B.m1();
    }
}


class A{

    //靜態方法
    public static void m1(){
        System.out.println("A中靜態方法m1");
    }
}

class B extends A{

    //嘗試重寫父類的靜態方法
    public static void m1(){
        System.out.println("B中靜態方法m1");
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章