天天看點

Java學習8:封裝特性之方法的重寫(Override)詳解及執行個體說明1.概述

重寫是封裝的特性之一。

1.概述

方法的重寫(override)是封裝的特性之一。

在子類中可以根據需要對基類中繼承來的方法進行重寫。

重載和重寫沒有任何關系。

作用:通過重寫,子類既可以繼承父類的東西,又可以靈活的擴充。

1.1特點

  • 在子類中可以根據需要對基類中繼承來的方法進行重寫。
  • 重寫方法必須和被重寫方法具有相同方法名稱、參數清單和傳回值類型。
  • 重寫方法不能使用比被重寫方法更嚴格的通路權限。(由于多态)

1.2執行個體說明

在上一節:繼承詳解及用法中,提到如果子類繼承的父類方法不完全是我們所希望的方法,可以通過重寫進行實作。

下面我們通過代碼進行說明:

public class Animal {
    String name;

    void eat() {
        System.out.println("have a good dinner");
    }
}

class Birds extends Animal {

    void fly() {
        System.out.println("Yeah,I can fly~~");
    }
}
           

假如,鳥類在eat的時候,需要輸出jiujiujiu。可通過如下代碼實作:

class Birds extends Animal {

    @Override
    void eat() {
        System.out.println("jiujiujiu");
    }

    void fly() {
        System.out.println("Yeah,I can fly~~");
    }
}
           

這樣我們就可以實作擴充我們的父類方法。

關于@Override是注解,用于限定的方法必須override父類的方法,否則編譯不通過。這裡先不讨論。

則我們在通過Bird執行個體調用eat方法時,是調用的重寫後的方法。

哪之前的父類的方法呢?其實還存在,我們可以在子類通過super進行調用。如下:

class Birds extends Animal {

    @Override
    void eat() {
        super.eat(); // 調用父類的方法
        System.out.println("----------------------------------------"); // 分隔線
        System.out.println("jiujiujiu");
    }

    void fly() {
        System.out.println("Yeah,I can fly~~");
    }
}
           

下面我們建立一個測試類,進行測試輸出結果:

class Test {
    public static void main(String[] args) {
        Birds b = new Birds();
        b.eat();

    }
}
           

結果如下:

have a good dinner
----------------------------------------
jiujiujiu