C語言中文網 目錄

Java方法重寫

< 上一頁Java方法重載 Java多態性下一頁 >

在子類中如果創建了一個與父類中相同名稱、相同返回值類型、相同參數列表的方法,只是方法體中的實現不同,以實現不同于父類的功能,這種方式被稱為方法重寫,又稱為方法覆蓋

在重寫方法時,需要遵循下面的規則:
  • 參數列表必須完全與被重寫的方法參數列表相同,否則不能稱其為重寫。
  • 返回的類型必須與被重寫的方法的返回類型相同,否則不能稱其為重寫。
  • 訪問修飾符的限制一定要大于被重寫方法的訪問修飾符(public>protected>default>private)。
  • 重寫方法一定不能拋出新的檢査異常或者比被重寫方法聲明更加寬泛的檢査型異常。例女口,父類的一個方法聲明了一個檢査異常 IOException,在重寫這個方法時就不能拋出 Exception,只能拋出 IOException 的子類異常,可以拋出非檢査異常。

例 1

每種動物都有名字和年齡屬性,但是喜歡吃的食物是不同的,比如狗喜歡吃骨頭、貓喜歡吃魚等,因此每種動物的介紹方式是不一樣的。

下面編寫 Java 程序,在父類 Animal 中定義 getInfo() 方法,并在子類 Cat 中重寫該方法, 實現貓的介紹方式。父類 Animal 的代碼如下:
public class Animal
{
    public String name;    //名字
    public int age;    //年齡
    public Animal(String name,int age)
    {
        this.name=name;
        this.age=age;
    }
    public String getInfo()
    {
        return"我叫"+name+",今年"+age+"歲了。";
    }
}

子類 Cat 的代碼如下:
public class Cat extends Animal
{
    private String hobby;
    public Cat(String name,int age,String hobby)
    {
        super(name,age);
        this.hobby=hobby;
    }
    public String getInfo()
    {
        return"喵!大家好!我叫"+this.name+",我今年"+this.age+"歲了,我愛吃"+hobby+"。";
    }
    public static void main(String[] args)
    {
        Animal animal=new Cat("小白",2,"魚");
        System.out.println(animal.getInfo());
    }
}

如上述代碼,在 Animal 類中定義了一個返回值類型為 String、名稱為 getInfo() 的方法,而 Cat 類繼承自該類,因此 Cat 類同樣含有與 Animal 類中相同的 getInfo() 方法。但是我們在 Cat 類中又重新定義了一個 getInfo() 方法,即重寫了父類中的 getInfo() 方法。

在 main() 方法中,創建了 Cat 類的對象 animal,并調用了 getInfo() 方法。輸出的結果如下:
喵!大家好!我叫小白,我今年2歲了,我愛吃魚。

如果子類中創建了一個成員變量,而該變量的類型和名稱都與父類中的同名成員變量相同,我們則稱作變量隱藏
< 上一頁Java方法重載 Java多態性下一頁 >

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo