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類中的所有抽象方法,否則會有錯誤出現。