1、區(qū)分普通方法和抽象方法
(推薦教程:java入門教程)
在java中,當(dāng)一個類的方法被abstract關(guān)鍵字修飾時,該方法就稱為抽象方法,而抽象方法所在的類必須被定義為抽象類。當(dāng)一個方法被定義為抽象方法后,意味著該方法不會有具體的實現(xiàn),而是在抽象類的子類中通過方法重寫進行實現(xiàn)。
2、定義抽象方法的語法格式:
[訪問修飾符]abstract<返回類型><方法名>([參數(shù)列表])
abstract關(guān)鍵字表示該方法被定義為抽象方法。
3、普通方法和抽象方法的對比
抽象方法需要用abstract關(guān)鍵字修飾,普通方法不需要;
普通方法有方法體,抽象方法沒有方法體。
4、區(qū)分普通類和抽象類
在java中,當(dāng)一個類被abstract修飾時,該類被稱為抽象類。
5、普通類和抽象類的區(qū)別
抽象類需要使用abstract關(guān)鍵字修飾,普通類不需要;
普通類可以實例化,抽象類不能被實例化。
6、代碼示例:
父類
package demo.chongwu; public abstract class Pet { private String name = "無名氏"; private int health =100; private int love =0; //有參構(gòu)造方法 public Pet (String name){ this.name =name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getHealth() { return health; } public void setHealth(int health) { this.health = health; } public int getLove() { return love; } public void setLove(int love) { this.love = love; } //抽象方法,輸出寵物信息 public abstract void print(); }
子類
package demo.chongwu; public class Dog extends Pet{ private String strain; public Dog(String name, String strain) { super(name); this.strain = strain; } public String getStrain() { return strain; } public void setStrain(String strain) { this.strain = strain; } @Override public void print() { System.out.println("我的名字是"+this.getName()+"我是一只"+this.strain+"."); } }
測試:
package demo.chongwu; public class Test { public static void main(String[] args) { Pet pet =new Dog("布爾","拉布拉多"); pet.print(); } } 輸出結(jié)果: 我的名字是布爾我是一只拉布拉多.
說明:
通過將print方法抽象化,并且在子類里重寫父類的print方法,這時候可以實例化子類得到子類對象,并且通過子類對象調(diào)用子類方法,從而輸出子類信息。否則不這么做的話,無法直接實例化抽象類,將無法輸出正確子類信息。
(視頻教程推薦:java視頻教程)
7、抽象類和抽象方法的優(yōu)勢與局限性
優(yōu)勢:
抽象類中已經(jīng)實現(xiàn)的方法可以被其子類使用,使得代碼可以被復(fù)用;
為子類提供了抽象方法,提供了子類具有自身的獨特性。
抽象類的局限性:
父類的方法不一定通用,因為子類的方法比較特殊;
子類繼承父類抽象類時,寫出來的方法可能會出現(xiàn)代碼重復(fù)的情況。