我是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]);
还有其他方法可以将它们组合成一个数组。如果有方法,我该怎么做。
答案 0 :(得分:2)
如果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]);
答案 1 :(得分:2)
来自官方文档Java Arrays:
数组是一个容器对象,它包含固定数量的值 单一类型 ...
简短的回答是你不能使用不同的类。
但是,这里的技巧是你可以使用面向对象,以便为更通用的类创建一个数组,允许在数组中设置子类。
您提到AssembledPart
是Part
的子类,这意味着您可以将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.
}