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