這是我參與更文挑戰的第4天,活動詳情查看: 更文挑戰web
學習抽象類以前,咱們要知道爲何要學抽象類,抽象類用來幹什麼?帶着這兩個問題來迎接咱們接下來的學習。設計模式
當咱們定義類的時候,每每會給這些類寫一些方法,這些方法用來描述該類的行爲。
假如咱們要求不一樣形狀的面積,咱們能夠定義一個Shape類,但不一樣的Shape子類計
算面積的方法是不同的,咱們的Shape類並不知道怎麼計算每個不一樣形狀的圖形
面積,這時咱們就能夠使用抽象類,使抽象類中含有求面積這一通用行爲,而咱們通
太重寫getArea()方法,就能夠求不一樣形狀的面積。
複製代碼
可能到這裏你還不明白,不要緊,下面咱們經過例子來具體分析。markdown
在第二個問題以前咱們先了解抽象類和抽象方法的一些規則。post
public abstract class Test {
public Test(){
}
//抽象方法不能含有方法體
public abstract void showAll(){
//error
}
public abstract void Print();
}
複製代碼
public abstract class Test {
public Test(){
}
//抽象類中能夠有非抽象方法,也能夠含有抽象方法
public void speak (String s){
System.out.println(s);
}
public abstract void Print();
}
public class Test {
public Test(){
}
//非抽象類,不能含有抽象方法
public abstract void Print();//error
}
複製代碼
抽象類不能建立實例,只能被當成父類來繼承,而使用抽象類,能夠發揮多態的優點,使程序更加
靈活。其實抽象類是一種更高級的抽象,它從一些具備相同特徵的子類中抽象出來,做爲子類的通用
模板。
抽象類體現的就是一種模板設計,這也是設計模式的一中。(若是想要了解設計模式,建議你們去b站
找視頻來學習,對咱們的工做仍是頗有用的。)
複製代碼
須要注意的是抽象類是abstract關鍵字修飾的,代表這個類只能被繼承,而抽象方法一樣須要abstract來修飾,代表這個方法只能被子類重寫,而final修飾的類不能被繼承,被final修飾的方法不能被重寫,所以永遠不能同時使用abstract和final。學習
以上就是我對抽象類的一些淺解,若有不對或遺漏之處,歡迎你們留言指正。spa
下期咱們來說和抽象類有關的接口。設計