繼承 inheritance
繼承是物件導向重要特性之一,子類別可繼承父類別中宣告為public或protected之方法。就重複使用 (reuse) 的觀點,每個子類別可reuse其父類別的資料結構與程式碼。以繼承方式定義子類別,其語法如下:
modifier class class-name extends super-name{
declaration of data members // 資料成員宣告
constructor // 物件建構函式
definition of class methods // 類別方法定義
}
上述super-name為父類別名稱,若類別定義時沒有宣告類別繼承關係,Java預設新類別是繼承自『java.lang.Object』,所以下面兩行的類別定義是相同。
abstract class SHAPE{…}
abstract class SHAPE extends Object{…}
子類別除了可以使用繼承自父類別的資料成員及成員物件,當然也可宣告新的資料成員、定義新的成員方法、或覆寫 (override) 繼承自父類別的成員方法。有一點要特別注意,Java的類別繼承方式為單一繼承,所以extends關鍵字後只能接一個父類別名稱。
下列程式碼中,RECTANGLE類別繼承自SHAPE類別,並在RECTANGLE子類別中覆寫了area、perimeter及showinfo方法。RECTANGLE子類別還宣告了width及height資料成員,並在建構子中設定資料成員值。
1. public class RECTANGLE extends SHAPE {
2. private float width; // 資料成員
3. private float height;
4. public RECTANGLE (float w, float h) { // 建構子
5. height = h;
6. width = w;
7. }
8. protected float area() { // 計算矩形面積
9. return height*width;
10. }
11. protected float perimeter() { // 計算矩形周長
12. return 2*(width + height);
13. }
11. protected void showinfo() {
12. System.out.println("This is a rectangle");
13. }
14. }
子類別除了繼承父類別的成員方法外,當然也可新增新自己的成員方法。在此我們在RECTANGLE類別中新增一個resize方法,程式碼如下:
1. public void resize(float rate) {
2. width = width * rate;
3. height = height * rate;
4. }