簡體   English   中英

從抽象類繼承

[英]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();

}

我也有兩個繼承自它的類:

  1. HandicappedCustomer ,我要將價格設置為0。
  2. 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因此所有操作均應按預期進行。

ideone現場演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM