僅宣告方法名稱,而不實作,此方法稱為「抽象方法」(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(); } } }執行結果:
沒有留言:
張貼留言