1、什麼是重寫java
在子類中建立了一個與父類中名稱相同、返回值類型相同、參數列表的方法相同,只是方法體中的實現不一樣,以實現不一樣於父類的功能,這種方式被稱爲方法重寫(override),又稱爲方法覆蓋、方法複寫。ide
2、爲何須要重寫idea
原有的方法沒法知足新的需求,須要對這個方法進行改良來知足新的需求。重寫是出如今子類繼承父類方法中。能夠看出,重寫就是子類繼承的父類方法沒法知足子類的新的功能需求,子類對父類的這個方法進行改良重寫的一種方式。子類能夠根據須要,定義特定於本身的行爲。既沿襲了父類的功能名稱,又根據子類的須要從新實現父類方法,從而進行擴展加強。spa
3、重寫的條件/規則對象
靜態方法和非靜態方法是不同的:在靜態方法中,方法的調用只和左邊聲明的對象類型有關,而與右邊無關,是哪一個類型,就調用對應的方法。blog
同時,靜態方法是在idea中沒法使用快捷鍵(Alt+Insert==》選擇Overrider Methods)快速的生成重寫的方法:繼承
非靜態方法:虛擬機
非靜態方法能夠由idea建立重寫的方法:io
總結:編譯
2. 方法名必須相同;
返回的類型必須與被重寫的方法的返回類型相同
參數列表必須相同;
修飾符:範圍能夠擴大但不能縮小:public>Protected>Default;
拋出的異常:範圍,能夠被縮小,但不能擴大;
子類的方法和父類必要一致;方法體不一樣!;
每種動物都有名字和年齡屬性,可是喜歡吃的食物是不一樣的,好比狗喜歡吃骨頭、貓喜歡吃魚等,所以每種動物的介紹方式是不同的。Dog經過重寫Animal的方法來表現狗特有的行爲特徵。
Animal父類:
public class Animal { public void shout(){ System.out.println("動物都會叫"); } void move(){ System.out.println("動物都會走"); } protected void eat(String food){ System.out.println("動物都會吃食物"); } private void breed(){ System.out.println("動物須要繁衍"); } }
Dog子類:
public class Dog extends Animal{ @Override public void shout() { System.out.println("汪汪汪"); } @Override void move() { System.out.println("狗用四隻腿跑"); } @Override protected void eat(String food) { System.out.println("啃骨頭"); System.out.println("狗還要吃"+food); } }
對類進行實例化:
public class AnimalTest { public static void main(String[] args) { Animal a = new Animal(); //儘管 b 屬於 Animal 類型,可是它運行的是 Dog 類的 move方法 Animal b = new Dog(); a.shout(); a.move(); a.eat("水"); //a.breed(); 私有屬性,沒法在類之外使用 b.shout(); b.move(); b.eat("肉"); } }
在上面的例子中能夠看到,儘管 b 屬於 Animal 類型,可是它運行的是 Dog 類的方法。這是因爲在編譯階段,只是檢查參數的引用類型。然而在運行時,Java 虛擬機(JVM)指定對象的類型而且運行該對象的方法。所以在上面的例子中,之因此能編譯成功,是由於 Animal 類中存在 move 方法,然而運行時,運行的是特定對象的方法。
以上實例編譯運行結果以下
動物都會叫 動物都會走 動物都會吃食物 汪汪汪 狗用四隻腿跑 啃骨頭 狗還要吃肉
4、重寫的注意事項
5、super關鍵字的使用
當須要在子類中調用父類的被重寫方法時,要使用 super 關鍵字。
public class Animal { public void shout(){ System.out.println("動物都會叫"); } }
子類調用父類的shout()方法:
public class Dog extends Animal{ @Override public void shout() { super.shout(); System.out.println("汪汪汪"); } }
public class AnimalTest { public static void main(String[] args) { Animal b = new Dog(); b.shout(); } }
運行結果
動物都會叫 汪汪汪