僅宣告方法名稱,而不實作,此方法稱為「抽象方法」(abstract method)。 包含抽象方法的類別,稱為「抽象類別」。
限制:
1. 抽象類別與一般類別不同,抽象類別不能拿來直接產生物件
2. 抽象類別內部的沒有定義處理方法,因此繼承到子類別之後要加以明確定義,也就是加以改寫(overloading)
3. 不可對抽象類別方法指定為 final、static、private,因為子類別無法改寫
語法:
使用修飾詞 abstract 去定義抽象類別及抽象方法
abstract class 類別名稱 {
宣告 field;
abstract 傳回值資料型態 method 名稱 (參數 ...)
}
用法:
一般宣告抽象父類別的型態 Data Type 的變數,去參照其子類別的實體物件
Tips 小常識:
以 instanceof 運算子,偵測子物件所屬的類別
類別檔: Circle.java
public abstract class Circle {
protected double r;
public Circle(double r) { this.r = r; }
public double getR() { return r; }
public abstract void draw();
}
類別檔: SolidCircle.java
public class SolidCircle extends Circle {
public SolidCircle(double r) { super(r); }
public void draw() {
System.out.println("Radius of Solid Circle :" + getR());
}
}
類別檔: DotCircle.java
public class DotCircle extends Circle {
public DotCircle(double r){ super(r); }
public void draw() {
System.out.println("Radius of Dot Circle :" + getR());
}
}
類別檔: CircleTest.java
public class CircleTest {
public static void main(String[] args) {
Circle p = new SolidCircle(5.0);
if (p instanceof SolidCircle) {
System.out.println("這物件是 SolidCircle 類別 ");
p.draw();
}
p = new DotCircle(10.0);
if (p instanceof DotCircle) {
System.out.println("這物件是 DotCircle 類別 ");
p.draw();
}
}
}
執行結果:

沒有留言:
張貼留言