[英]Inheriting from an abstract class
假設我有一個抽象類:
public abstract class Customer {
private int price;
public void setPrice(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
public abstract void pay(int n);
public abstract void occupySpace();
}
我也有兩個繼承自它的類:
HandicappedCustomer
,我要將價格設置為0。 RegularCustomer
,我要將價格設置為100。 現在,如果我為每個類創建一個實例並稱為getPrice()
,則兩個實例均返回0。 當我為類的每個對應實例調用getPrice()
時,使它返回0和100的最簡單方法是什么?
當我嘗試在RegularCustomer
類內調用setPrice(100)
,我發現它不起作用。 簡而言之,我要在主機中包含以下代碼:
Customer a = new HandicappedCustomer();
Customer b = new RegularCustomer();
System.out.println(a.getPrice());
System.out.println(b.getPrice());
並使其返回:
0
100
如果您希望getPrice
對於常規客戶始終返回100,對於殘障客戶始終返回0,則應編寫
class RegularCustomer extends Customer {
public int getPrice() {
return 100;
}
}
class HandicappedCustomer extends Customer {
public int getPrice() {
return 0;
}
}
但這聽起來並不完全像您想要的(至少對於普通客戶而言),因為您在設計中包括了setPrice
。 聽起來好像您希望這些值最初返回。 在這種情況下:
class RegularCustomer extends Customer {
public RegularCustomer() {
setPrice(100);
}
}
和
class HandicappedCustomer extends Customer {
public HandicappedCustomer() {
setPrice(0);
}
}
應該可以。
它們都將繼承setPrice
以防您稍后更改它們,並且它們都將繼承getPrice
因此所有操作均應按預期進行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.