Java抽象類和方法


Java可以定義這樣的一個類:這個類不能建立物件。它的目的只是表示一個想法或是一個框架,提供給其他類的物件共用。這樣的類稱為抽象類

語法

在類宣告中需要使用abstract關鍵字來宣告一個抽象類。
例如,下面的程式碼宣告一個Shape的抽象類:

public abstract class Shape  {

}

下面的程式碼為Shape類新增了一個draw()方法。

public abstract class Shape  {
    public  Shape() {
    }

    public abstract  void  draw();
}

抽象類不一定要求它具有至少一個抽象方法。如果一個類有一個被宣告或繼承的抽象方法,它必須被宣告為抽象類。抽象方法的宣告方式與任何其他方法相同,只是在方法的最後加上分號表示,並且不會有任何執行程式碼語句。

範例

下面的Shape類有抽象和非抽象方法。

abstract class Shape {
  private String name;

  public Shape() {
    this.name = "Unknown  shape";
  }

  public Shape(String name) {
    this.name = name;
  }

  public String getName() {
    return this.name;
  }

  public void setName(String name) {
    this.name = name;
  }

  // 帶有分號,表示為抽象方法
  public abstract void draw();

  public abstract double getArea();

  public abstract double getPerimeter();
}

下面的程式碼展示了如何建立一個Rectangle類,它繼承自Shape類。

class Rectangle extends Shape {
  private double width;
  private double height;

  public Rectangle(double width, double height) {
    // Set the shape name as "Rectangle"
    super("Rectangle");
    this.width = width;
    this.height = height;
  }

  // Provide an implementation for inherited abstract draw() method
  public void draw() {
    System.out.println("Drawing a  rectangle...");
  }

  // Provide an implementation for inherited abstract getArea() method
  public double getArea() {
    return width * height;
  }

  // Provide an implementation for inherited abstract getPerimeter() method
  public double getPerimeter() {
    return 2.0 * (width + height);
  }
}

這個 Rectangle類要實現父類別Shape類中的所有抽象方法,否則會有錯誤出現。