Java 数组来存储两个不同类的对象?

Java 数组来存储两个不同类的对象?,java,arrays,Java,Arrays,我是java和一般编程的初学者。基本上,我想知道是否有可能在同一数组中存储不同类的对象。例如,不要像这样创建两个单独的数组: //AssembledPart is subclass of Part Part[] part = new Part[4]; part[0] = new Part("p101", "Crank", 218, 12.20); part[1] = new Part("p102", "Pedal", 320, 14.30); part[2] = new

我是java和一般编程的初学者。基本上,我想知道是否有可能在同一数组中存储不同类的对象。例如,不要像这样创建两个单独的数组:

//AssembledPart is subclass of Part
Part[] part = new Part[4];
    part[0] = new Part("p101", "Crank", 218, 12.20);
    part[1] = new Part("p102", "Pedal", 320, 14.30);
    part[2] = new Part("p103", "Handlebar", 120, 35.50);
    part[3] = new Part("p104", "Stem", 90, 20.00);

    AssembledPart[] asPart = new AssembledPart[2];
    asPart[0] = new AssembledPart("p183", "Crank-Pedal", 80, 3.50, part[0], part[1]);
    asPart[1] = new AssembledPart("p184", "Handlebar-Stem", 30, 1.50, part[2], part[3]);

是否有其他方法可以将它们组合到一个数组中。如果有方法,我可以如何操作。

否,同一数组中不能有不同的对象。创建对象数组时,指定要放入该数组的特定对象。您必须为不同的类创建不同的对象数组。

如果
AssembledPart
Part
的子类(如您在注释中所指出的),那么您所要求的是微不足道的。子类始终可以分配给其父类,因此您只需执行以下操作:

Part[] part = new Part[6];
part[0] = new Part("p101", "Crank", 218, 12.20);
part[1] = new Part("p102", "Pedal", 320, 14.30);
part[2] = new Part("p103", "Handlebar", 120, 35.50);
part[3] = new Part("p104", "Stem", 90, 20.00);
part[4] = new AssembledPart("p183", "Crank-Pedal", 80, 3.50, part[0], part[1]);
part[5] = new AssembledPart("p184", "Handlebar-Stem", 30, 1.50, part[2], part[3]);

从官方文件:

数组是一个容器对象,它包含固定数量的 a单一类型

简而言之,您不能使用不同的类

然而,这里的技巧是,您可以使用面向对象,以便为更通用的类创建一个数组,该类允许在数组中设置子类

您提到
AssembledPart
Part
的子类,这意味着您可以将
AssembledPart
对象设置为
Part
数组。像这样:

    Part[] yourArray = new Part[2];
    yourArray[0] = new Part();
    yourArray[1] = new AssembledPart();
同样的概念不仅在使用集合时有效,而且在许多其他对象使用中,在几乎所有面向对象语言中都有效


我建议您在中多读一些,这将使您的头脑清楚一些概念=)。

您可以创建一个接口IPart,并在Part和AssembledPart中实现它。这样,您就可以创建该接口的数组,并使用该数组在其中存储Part和AssembledPart对象

interface IPart {
}

class Part implements IPart {
}

class AssembledPart implements IPart {
}
// in code you can do following...
IPart[] parts = new IPart[2];
parts[0] = new Part(...);
parts[1] = new AssembledPart(...);
您还可以通过扩展AssembledPart来实现这一点

 class Part {
 }
 class AssembledPart extends Part{
 }
 // in code..
 Part[] parts = new Part[2];
 parts[0] = new Part(...);
 parts[1] = new AssembledPart(...);
另一种方法是使用对象数组

 Object[] parts = new Object[2];
 parts[0] = new Part(...);
 parts[1] = new AssembledPart(...);
但您需要理解为什么要合并两个数组,以及如何合并它

仅供参考,在某些时候,您可能需要检查阵列中的对象类型。你可以使用

  if(parts[0] instance of AssembledPart) {
     // do something.
  }

我忘了提到组装部件是部件的子类。还是不可能吗?@TamLam那么就很好了。你的问题可能已经在这里得到了回答:你可以组合它们(强制转换为父类),但一旦进入数组,就无法快速确定每个元素是哪个类。你可以查看集合:看起来你正在使用。我尝试使用对象[]前面的数组。它确实存储了我的对象,但我不能调用对象的方法。这是否意味着如果我将组装部件对象存储在Part[]数组中,我将无法调用它们的(组装部件对象)方法?您可以调用组装部件对象方法。但是你需要先输入cast。like((AssembledPart)数组[0])。someAssembledPartMethod();为什么要投否决票?你能指出答案遗漏了什么吗?