2015-11-05 27 views
1

我有一個包含ArrayList和2個子類的類。無法比較子類中ArrayList的大小

添加其他元素到ArrayList中第一個子類,但是當我仰望它仍然表示,第二子大小,該ArrayList的大小爲0。


類:

ArrayList <ClientManager> clientList = new ArrayList <ClientManager>(); 

子類1:

clientList.add(clientManager); 
System.out.println(clientList.size()); 

在第一個子類中,我添加一個元素並檢查,如果大小實際增加。


子類2:

實際代碼:

while (clientList.size() == 0); 

試驗1:

while (clientList.size() == 0) { 
    System.out.println(clientList.size()); 
} 

試驗2:

while (true) { 
      System.out.println(clientList.size()); 
     } 

在第二個子類中,我嘗試比較大小,但由於某種原因,它不承認更改。

當我通過打印尺寸測試它時,它總是打印'0'。

但是當我使用infinte while循環進行打印時,它會正確打印尺寸。

希望有人能幫忙。

+0

出租車你提供更多的代碼? –

+0

@Miha test1:while(clientList.size()== 0)表示大小不爲0時,不打印大小。所以你不應該期望打印與零不同。這就是爲什麼你使用無限循環來獲得尺寸的原因。 –

+0

@Sedat Polat你說得對。沒有想到這一點,但我想表明,在一種情況下,它具有正確的尺寸,而在另一種情況下,它沒有。 – Miha

回答

0

因爲當你實例化一個類的任何對象時,它會爲每個非靜態成員分配內存。因此,您的子類1對象具有一個clientList,並且子類2對象具有用於不同內存分配的不同對象。

+1

除了引入陰影和破壞多態性,通常不推薦。靜態方法不是動態綁定的一部分。我認爲靜態成員在繼承時應該與私有成員一樣對待,以防止出現這種情況。 –

+0

是的。對不起,我忘了。絕對正確。編輯答案。 –

+0

我現在使用靜態,並會看到,如果我稍後可以重寫它。雖然它只能起作用,如果我將印刷留在循環中。 – Miha