1

如果我在 DefaultItems 类中创建一个数组:

DefaultItems[] items = new DefaultItems[20];

我想用它作为 5 个不同类对象的存储数组。我想存储一个 Car 对象、Person 对象和 Pet 对象。

 DefaultItems[1] = Car Object;
 DefaultItems[2] = Person Object;

这可能吗?

4

3 回答 3

1

如果CarPerson从中派生,DefaultItems您的代码应该可以工作(假设拼写错误已修复)。

如果这些类没有任何关系,那么您可以通过使用Object[]而不是DefaultItems[]. 所有类都派生自Object.

于 2012-10-27T01:12:38.433 回答
0

确保所有 5 个对象(即CarPerson都是从基类扩展的DefaultItems一旦你这样做了,你就可以实现你想要的。

IE

 public class Person extends DefaultItems {
   //...
 }

 public class Car extends DefaultItems {
   //...
 }

然后

 DefaultItems[] items = new DefaultItems[2];
 DefaultItems[0] = new Person();
 DefaultItems[1] = new Car();

类及其子类的一个示例Number如下:

    Number[] nums = new Number[3];
    nums[0] = new Integer(0);
    nums[1] = new Double(1.0);
    nums[2] = new Float(0.5);

    for(Number num: nums){
        System.out.println(num);//<--prints the numbers
    }
于 2012-10-27T01:12:27.770 回答
0

以类型安全的方式,只要您要存储在数组中的所有对象共享一个它们继承的公共父类,这是可能的:

class Car extends MyObject {
  ...
}

class Person extends MyObject {
  ...
}

MyObject[] array = new MyObject[2];
array[0] = new Car();
array[1] = new Person();

但是在将它们添加到数组之后,它们可以像 MyObject 实例一样被访问(除非你对它们进行类型转换,这必须避免),所以如果 MyObject 类不提供公共接口,那么这是毫无意义的。最好使用组合:

class MyClass {
  Person person;
  Car car;
  ..
}
于 2012-10-27T01:12:36.827 回答