1. 程式人生 > >類的重用之繼承(Java)

類的重用之繼承(Java)

封裝是面向物件基石,類的重用就是面向物件的核心。

重用方式一:繼承

本質:繼承的出發點是若干類存在的相似點,共享相同的方法和屬性,這樣一來,相似處能夠提取出來重用,不必重複編寫程式碼。

實現:繼承是在一個父類的基礎上擴充套件新的功能實現的,父類定義了公共的屬性和方法,而其子類自動擁有了父類的所有功能,在此基礎上,又可以增添自己特有的新的屬性和方法進行擴充套件。

Java的類的繼承的特點:

1.Object是所有類的祖先,所以Java中建立一個新類時,總是在繼承。

2.Java只支援單繼承,每個子類只能有一個直接付磊,不允許有兩個以上的父類,這使得Java的繼承方式很直接,程式碼簡潔,結構清晰。

Java的類的繼承的缺點:

由於繼承中父類和子類之間的高度緊耦合性,一旦父類的資料成員或方法有變化,其子類也要做相應的更改。

類的繼承舉例:

比如以電子商品為例,Product是一個父類,屬性有產品ID,產品名字,產品種類和產品價格,還有獲取這些屬性的值的方法。實現程式碼如下:

public class Product {
    protected int ID;
    protected String name;
    protected String categories;
    protected double ProductPrice;
    int getID()
    {
        return ID;
    }
    String getName(){
        return name;
    }
    String getCategories(){
        return categories;
    }
    double getProductPrice(){
        return ProductPrice;
    }
}

繼承的關鍵字是extends,如下面的computer繼承Product的例子。computer在Product的基礎上增添了自己的記憶體和處理器的屬性。

public class computer extends Product {
    protected  int memory;
    protected  String ProssesorName;

    int getMemory(){
        return memory;
    }
    String getProssesorName(){
        return  ProssesorName;
    }

}

還有Laptop對Computer的繼承

public class computer extends Product {
    protected  int memory;
    protected  String ProssesorName;

    int getMemory(){
        return memory;
    }
    String getProssesorName(){
        return  ProssesorName;
    }

}

測試:

public class test {
    public static void main(String[] args) {
        computer apple = new computer();
        apple.ID = 124;
        apple.name = "MacBook";
        apple.categories = "Laptop";
        apple.ProductPrice=30000;
        System.out.println(apple.getName());
        System.out.println(apple.getCategories());
        System.out.println(apple.getProductPrice());

        Laptop mac = new Laptop();
        mac.name = "mac";
        mac.thickness=13.22;
        mac.weight=30;
        mac.memory=300;
        System.out.println(mac.name);
        System.out.println(mac.getThickness());
        System.out.println(mac.getWeight());
        System.out.println(mac.memory);

    }
}

結果:


需要說明的是這幾個父類的資料成員皆定義為protected,protected的訪問許可權範圍是本類和子類,繼而即使子類和父類不在同一個包裡,子類的方法仍然能訪問到從父類繼承而來的protected成員,然而子類的物件就不可以,因為子類的物件並不屬於子類

參考資料:《Java語言程式設計面向物件的設計思想與實踐》