2011-12-15 100 views
1

我有這個類繼承收集

public class Room{ 

private int n_bed; 
private float cost; 

private Collection<Client> clientlist; 

public Room(int n,float c){ 

    n_bed = n; 
    cost = c; 

    clientlist = new ArrayList<Client>(); 
} 

} 

這個類從上面的類繼承

public class RoomWithBar extends Room{ 

private Collection<Drink> drinkslist; 

public RoomWithBar(int n,float cost){ 

    super(n,cost); 

    drinkslist = new ArrayList<Drink>(); 
} 

public Collection<Drink> getDrinksList(){ 

    return drinkslist; 
} 

public void addDrink(Drink drink){ 

    drinkslist.add(drink) 
} 

} 

我的問題是:我也必須插入類RoomWithBar或集合的集合客戶端列表自動繼承?

回答

1

那是什麼protected修飾符呢。

protected Collection<Client> clientlist; 

現在,clientlist將在派生類中可訪問。

詳情click here.

1

集合被派生類自動繼承。

然而,由於clientlist聲明private,派生類將不能夠直接訪問它:你要麼需要創建一個getter方法或改變clientList到,例如,protected知名度。

0

clientlist是一個私有字段,這樣子類不能訪問它。所以在RoomWithBar課程中,你也無法達到它。

當您調用RoomWithBar類中的超級構造函數時,初始化將由Room類的構造函數完成。

不過,我會強烈建議用final關鍵字來聲明clientlist領域,以防止未初始化的領域,因爲如果你忘記打電話給super構造你的clientlist領域將是null

0

您將無法訪問Room類中的集合,因爲它是私人的。

您需要在Room類中指定與它交互的方法(如addClient,在我看來,最好的解決方案),或者使其受到保護並在RoomWithBar類中處理它。

如果你只是改變可見性,那麼你將不得不在實現未來的每個擴展類(如RoomWithJacuzzi或wtv)中實現交互,這不是一個偉大的設計。如果你需要特定的行爲,你總是可以覆蓋處理客戶端的方法,但這些應該在父類中定義。

0

由於clientlist被宣佈爲私密,因此您無法使用RoomWithBar甚至Room對象訪問它們。

將其設爲受保護或公開。或者在Room中聲明公開的方法來添加或獲取clientlist中的元素。您可以從RoomWithBar

0

隨着對象訪問這些方法聲明的任何說明符對象/變量由派生類繼承,但宣佈與私營那麼你不能直接訪問該對象/變量