2010-03-26 59 views
0

考慮以下情況(UML圖),調用子類方法的Java

如果Y的方法:

public void PrintWs(); 

和X有:

ArrayList <P> myPs = new ArrayList(); 

Y y = new Y(); 
Z z = new Z(); 
myPs.add(y); 
myPs.add(z); 

我如何遍歷每個myPs對象並調用所有Ys PrintWs(不使用instanceof)?

http://starbucks.mirror.waffleimages.com/files/68/68c26b815e913acd00307bf27bde534c0f1f8bfb.jpg

對不起,澄清:

  • Z含有1個Y對象。
  • Y和Z P的兩個子類
  • 的形象似乎工作,如果你刷新 - 我的名聲太低上傳圖片,所以當我獲得了15分:)
+4

我的圖像 – 2010-03-26 09:19:47

+0

如何類Y和Z與上獲得403? – 2010-03-26 09:22:39

+0

Y和Z是否都是P的子類? – DaveJohnston 2010-03-26 09:22:58

回答

1

你我將編輯不能 - 假設您只想嘗試在Y的實例上調用PrintWs,您需要確定哪些引用指向Y的實例...並且這是您使用instanceof的地方。 (你可以使用Y.class.isInstance(p),但是這只是一個稍微不同的形式)

當然,如果你可以讓P包含一個空操作PrintWs然後在Y中被覆蓋,那麼你可以調用它的一切列表...

+0

感謝您的直接答案! – 2010-03-26 14:06:44

0

好了,你可以嘗試垂頭喪氣到到Y在try塊,趕上任何ClassCastException ...這是不是我會在我的代碼做,但是從字面上理解,回答你的問題: - )

一個更好的解決辦法是移PrintWs()(有一個空的默認impleme ntation)到類P - 那麼你可以在myPs的所有元素上調用它,而不是downcast。

0

如果Y和Z是P的子類,那麼你可以用空的實現方法的聲明移到P和覆蓋它Y.這樣,你可以調用的方法在你的ArrayList中的所有對象,但只有那些Y的實例將有一個方法的實現。