本帖最後由 tonyh 於 2021-7-9 20:23 編輯
在設計Java程式時,當程式設計者希望基礎類別只是用來被衍生類別繼承,而不希望真正產生一個基礎類別的物件,此時就可以將基礎類別宣告成抽象類別。
所謂抽象類別(Abstract Class)是指無法建立物件,只能被衍生類別繼承的一種特殊類別,而在抽象類別裡可以宣告抽象方法(Abstract Method),抽象方法是一個尚未完全實作的方法,表示一個方法原型,必須在衍生類別中撰寫方法的實作內容。
關於抽象類別的幾個重點歸納如下:
1. 包含抽象方法的類別一定要宣告為抽象類別。
2. 抽象類別有建構子,但無法產生物件實體。
3. 抽象類別可同時包含抽象方法與一般方法,也可以完全沒有抽象方法。
4. 抽象類別一定要被繼承,而抽象方法一定要被改寫。
5. 若衍生類別中有任何一個抽象方法沒有被實作,則必須將該類別也宣告為抽象類別,以便強迫更下層的類別在繼承它後,實作剩餘沒有被實作的抽象方法。
- public class Ch71
- {
- public static void main(String[] args)
- {
- Square sq=new Square("方形1號","綠色",5);
- sq.showName();
- sq.showColor();
- sq.calArea();
- Tri tr=new Tri("三角形1號","粉紅色",7,5);
- tr.showName();
- tr.showColor();
- tr.calArea();
- }
- }
- abstract class Shape
- {
- String name, color;
- Shape(String name, String color)
- {
- this.name=name;
- this.color=color;
- }
- void showName()
- {
- System.out.println("物件名稱: "+name);
- }
- void showColor()
- {
- System.out.println("顏色為: "+color);
- }
- abstract void calArea();
- }
- class Square extends Shape
- {
- int x;
- Square(String name, String color, int x)
- {
- super(name,color);
- this.x=x;
- }
- void calArea()
- {
- System.out.println("面積為: "+x*x+"平方公分");
- }
- }
- class Tri extends Shape
- {
- double x, y;
- Tri(String name, String color, double x, double y)
- {
- super(name,color);
- this.x=x;
- this.y=y;
- }
- void calArea()
- {
- System.out.println("面積為: "+(x*y/2)+"平方公分");
- }
- }
複製代碼 |