给定超类集合的扩展类的实例

时间:2014-05-29 23:14:23

标签: java class

我正在寻找一些关于如何处理以下情况的建议:

假设我有一个类型的数组,并且在该数组中有各种类型的对象扩展所述类型。例如:我有一个超级Pet,我制作一个Pet数组,然后放入Dog,Cat和Fish类的各种对象并将它们放在这个数组中。现在,每种类型的宠物都有自己的领域和方法。

这是我的问题发挥作用的地方。我想循环遍历此数组并搜索特定对象并调用其中一个方法。建立我之前的例子,我想搜索一个名为“Benny”的狗。一旦找到它,我想打电话给Benny的getHairLength方法。但是,如果我正在迭代我的各种宠物类型的集合,我不能打电话给Pet[index].getHairLength,因为不是所有的宠物都有这种方法(只有狗做)。

任何提示?

2 个答案:

答案 0 :(得分:0)

if(pet[index] instanceof Dog) {
    ((Dog)pet[index]).getHairLength();
}

答案 1 :(得分:0)

1)你绝对可以将“Pet”(超类)转换为“Dog”(子类)。是否应该是另一个问题,但你“可以”。

2)如果你得到一个ClassCastException ...那么你做错了什么。您正在保存错误的对象或错误的类型。我们需要查看要排除故障的代码。

3)一种解决方案是将“Pets”保存到列表中,然后使用if / else块:

  Pet p = pets[i];
  if (p instanceof Dog)
     ...
  else if (p instanceof Cat)
     ...

4)另一个解决方案是将相同的对象保存到尽可能多的不同列表中:

  List<Pet> pets = new ArrayList<Pet>();
  List<Dog> dogs = new ArrayList<Dog>();
  ...
  Dog fido = new Dog (...);
  pets.add(fido);
  dogs.add(fido);

这样,你可以:

a)更有效地搜索“狗”(你不必处理任何“猫”或“金鱼”)

b)你不必投任何东西

c)您仍然可以完全灵活地聚合“宠物”。