2014年4月16日 星期三

抽象類別與方法

定義:

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

沒有留言:

張貼留言