當編寫乙個類的時候,常常考慮為該類定義一些方法,用以描述該類的行為方式,那麼這些方法都是具體的方法體,但是在某些情況下,某些父類只知道其子類應該包含怎樣的方法,但是無法知道子類如何實現這些方法,這裡就出現了抽象類以及抽象方法。
抽象方法和抽象類必須使用abstract修飾符來修飾,有抽象方法的類必須被定義為抽象類,而抽象類裡可以沒有抽象方法。
抽象類和抽象方法的定義規則如下:
抽象類和抽象方法都必須使用abstract來修飾,並且抽象方法沒有方法體。
抽象類不能被例項化,無法使用new關鍵字來呼叫抽象類構造器建立抽象類的例項,即使抽象類中沒有抽象方法,也不能建立例項。
抽象類中可以包含五種成分,成員變數,方法,初始化塊,構造器,內部類。
包含抽象方法的類只能被定義為抽象類。
定義抽象方法只需在普通方法前面加abstract修飾符,然後去掉方法體(就是花括號中的部分)。
看下面的**:
public abstract class shape
private string color;
public abstract double calperimeter();
public abstract string gettype();
public shape(){};
//構造器並不是用於建立shape物件,而是用於被子類呼叫
public shape(string color)
public void setcolor(string color)
public string getcolor()
}
在上面的**中包含兩個抽象方法,calperimeter和gettype,並且shape中包含了初始化塊,構造器,這些不是用於建立父類物件,而是在建立子類例項的時候被呼叫,因為子類繼承了父類。
下面定義乙個三角形類:
public class ******** extends shape
public void setside(double a,double b,double c)
public double calperimeter()
public string gettype()
}
因為三角形類被定義為普通類,所以必須 實現shape中的所有抽象方法。
下面再定義乙個triange類繼承shape類,並且實現shape類中的抽象方法。
public class circle extends shape
public void setradius(double radius)
@override
public double calperimeter()
@override
public string gettype()
public static void main(string args)
}
**編譯結果:
初始化執行shape構造器
初始化執行shape構造器
三角形12.0
黃色圓形
18.84955592153876
process finished with exit code 0
從編譯的結果可以看出,在建立子類例項的時候,因為子類對父類實現了繼承,所以在父類中的初始化以及構造也執行了,但是這不是對於父類的例項化操作。
優勢:利用抽象類和抽象方法能更好實現多型的操作。
從上面的例項可以看出,抽象類不能建立例項,只能當作父類來進行繼承,所以抽象類被看作是多個類的通用模板,子類在父類上進行擴充套件,改造。
模板模式在物件導向的軟體中很常用,我們來看看他的規則:
抽象類定義方法,把不能實現的抽象方法留給子類來實現。
父類中的方法中需要呼叫其它的方法,這個方法既可以由子類實現也可以是父類實現。
java之抽象類
1 抽象類概念 抽象類前使用abstract關鍵字修飾,則為抽象類 2 抽象類的應用場景 a 在某些情況下,乙個父類只知道其子類應該包含某些方法,但是不能確切的知道如何實現這些方法 b 從多個具有相同特徵的類中抽象出乙個抽象類,以這個類作為子類的模板,從而避免了子類設計的隨意性 3 作用 限制規定子...
java之抽象類
分析事物時,發現了共性內容,就出現向上抽取。會有這樣一種特殊情況,就是方法功能宣告相同,但方法功能主體不同。那麼這時也可以抽取,但只抽取方法宣告,不抽取方法主體。那麼此方法就是乙個抽象方法。比如我們要宣告乙個人類class,人類包含很多種,美國人和中國人。那麼人類肯定會說話,但是說的是英語還是漢語需...
Java學習 抽象類
當多個類中出現相同功能,但是功能主體不同 這是可以進行向上抽取,這時,只抽取功能定義,而不抽取功能主體 抽象 看不懂 抽象類的特點 1 抽象方法一定在抽象類中。2 抽象方法和抽象類都必須被abstract關鍵字修飾。3 抽象類不可以用new建立物件。以為呼叫抽象方法沒意義。4 抽象類中的方法要被使用...