2010-03-26 43 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的实例将有一个方法的实现。