類的重用之繼承(Java)
阿新 • • 發佈:2019-01-30
封裝是面向物件基石,類的重用就是面向物件的核心。
重用方式一:繼承
本質:繼承的出發點是若干類存在的相似點,共享相同的方法和屬性,這樣一來,相似處能夠提取出來重用,不必重複編寫程式碼。
實現:繼承是在一個父類的基礎上擴充套件新的功能實現的,父類定義了公共的屬性和方法,而其子類自動擁有了父類的所有功能,在此基礎上,又可以增添自己特有的新的屬性和方法進行擴充套件。
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語言程式設計面向物件的設計思想與實踐》