0

有可能在 Java 中做这样的事情吗?

Object[] objArray = { new Car(), new Human() }

我读到数组元素都必须是相同的类型,但这些元素不都是 Object 类型吗?

4

5 回答 5

3

是的,这是可能的,但不是经常有用,而且总是很危险。

如果要将某些对象放入集合(列表或数组)中,则集合的类型必须允许有一个共同的祖先。由于Object它是 Java 中所有 OO 类型的共同祖先,因此您可以将任何东西放入其中(并且,使用 Java 6 的自动装箱,甚至是原语)。

当您使用列表中的元素时,问题就开始了。只要你只需要调用共同祖先类型提供的方法,一切都很好。

但最终,您将需要调用该Car类型的方法,这意味着您必须识别集合中的实例(这在代码中有点慢且相当笨拙)并使用强制转换(对于糟糕的代码总是一个好兆头) .

于 2012-06-19T07:43:19.873 回答
2

你是对的,即使它不被认为是良好的 OO 实践,它也可以正常工作。

于 2012-06-19T07:38:05.423 回答
1

继承用于定义is-a关系。由于 Java 中的每个类都扩展java.lang.Object(直接或间接),因此 Car 实例Object 实例,Human 实例Object 实例。

因此,当然,一组对象可以容纳人、汽车和其他所有类型的对象。

于 2012-06-19T07:40:36.423 回答
0

是的,可以做类似的事情,但它不是很像 OO。

确保在访问对象时进行显式转换,例如

Human h = (Human) objArray[1337];

玩得开心!

于 2012-06-19T07:40:24.283 回答
0

是的,有可能!既然Object是所有阶级的上层阶级

于 2012-06-19T07:48:34.487 回答