用于存储两个不同类的对象的数组?

时间:2015-10-17 00:27:09

标签: java arrays

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

//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]);

还有其他方法可以将它们组合成一个数组。如果有方法,我该怎么做。

4 个答案:

答案 0 :(得分:2)

如果AssembledPartPart的子类(正如您在评论中所指出的那样),那么您提出的问题就是微不足道的。子类总是可以分配给它们的父类,所以你需要做的就是:

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]);

答案 1 :(得分:2)

来自官方文档Java Arrays

  

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

简短的回答是你不能使用不同的类。

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

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

    Part[] yourArray = new Part[2];
    yourArray[0] = new Part();
    yourArray[1] = new AssembledPart();

这个相同的概念不仅可以在使用集合时使用,而且可以在许多其他对象用途中使用,几乎适用于所有面向对象的语言。

我建议你在Object-Oriented Programming Concepts中阅读更多信息,在一些概念中清除你的想法=)。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

您可以创建接口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

数组可以做到的另一种方法
 Object[] parts = new Object[2];
 parts[0] = new Part(...);
 parts[1] = new AssembledPart(...);

但您需要了解为什么要合并两个数组以及如何合并它。

fyi,在某些时候你可能需要检查你在数组中有什么样的对象。你可以使用。

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