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