是否有可能在Java中做这样的事情?
Object[] objArray = { new Car(), new Human() }
我读到数组元素都必须是同一类型,但这些类型都不是Object?
答案 0 :(得分:3)
是的,它可能但不常用,而且总是很危险。
如果要将某些对象放入集合(列表或数组)中,则集合的类型必须允许共同的祖先。由于Object
是Java中所有OO类型的共同祖先,因此您可以将任何内容放入其中(并且,使用Java 6的自动装箱,甚至原语)。
使用列表中的元素时会出现问题。只要您只需要调用共同祖先类型提供的方法,一切都很好。
但最终,你会想要调用Car
类型的方法,这意味着你必须识别集合中的实例(这在代码中有点慢和非常笨拙)并使用强制转换(对于糟糕的代码总是一个好兆头。)
答案 1 :(得分:2)
你是对的,即使它不被认为是优秀的OO练习,这也很合适。
答案 2 :(得分:1)
继承用于定义 is-a 关系。由于Java中的每个类都扩展java.lang.Object
(直接或间接),因此Car实例是-a Object实例,而Human实例是-a Object实例。
因此,当然,一系列物体可以容纳人类,汽车和其他各种物体。
答案 3 :(得分:0)
是的,可以做类似的事情,但不像OO那样。
确保在访问对象时进行明确的强制转换,例如
Human h = (Human) objArray[1337];
玩得开心!
答案 4 :(得分:0)
是的,有可能!由于Object
是所有类的上层类