abstract 方法的類必須宣告為 abstract class。final 修飾抽象類/方法 (違背繼承/覆寫目的)。private (子類需可見)。abstract class Shape {
private String color;
public Shape(String color) { this.color = color; }
public String getColor() { return color; }
public abstract double area(); // 抽象方法
public void printInfo() { System.out.println("Color: " + color); } // 普通方法
}
class Circle extends Shape {
private double radius;
public Circle(String color, double radius) {
super(color); // 必須先呼叫父類建構子
this.radius = radius;
}
@Override
public double area() { return Math.PI * radius * radius; }
}
class Rectangle extends Shape {
private double w, h;
public Rectangle(String color, double w, double h) {
super(color);
this.w = w; this.h = h;
}
@Override
public double area() { return w * h; }
}
抽象類定義演算法骨架,延遲關鍵步驟至子類實作。
abstract class DataProcessor {
// 模板方法 (final 防止覆寫)
public final void process() {
readData();
handleData(); // 抽象步驟
writeData();
}
protected void readData() { System.out.println("讀取資料..."); }
protected abstract void handleData(); // 子類實作
protected void writeData() { System.out.println("寫入資料..."); }
}
class CsvProcessor extends DataProcessor {
@Override protected void handleData() { System.out.println("處理 CSV..."); }
}
class JsonProcessor extends DataProcessor {
@Override protected void handleData() { System.out.println("處理 JSON..."); }
}
抽象類雖不可直接 new,但作為父類建構子鏈關鍵一環,確保子類物件完整初始化。