2 回答
TA贡献1853条经验 获得超9个赞
让我们一步一步来:
Object
是Java中所有引用类型的根源。凡是有参考价值的东西,也是instanceof Object
!“显然”,
a[0] = "asd";
分配一个String。字符串默认是对象。最后,
a[1] = 1;
导致自动装箱。您正在将一个Integer对象分配给该数组槽,而不是原始int 值 1。
当然,这里还值得一提的是协方差。
TA贡献1839条经验 获得超15个赞
想象一下,你有一个类动物
class Animal {
...
}
以及扩展动物类的其他类,例如狗类和猫类:
class Dog extends Animal {
...
}
class Cat extends Animal {
...
}
在容器(数组、列表...)中,您现在想要存储不同的对象。以下几点可能是显而易见的:
Dog[] dogs = new Dog[2];
dogs[0] = new Dog("Bobby");
dogs[1] = new Dog("Jack");
Cat[] cats = new Cat[2];
cats[0] = new Cat("Cathy");
cats[1] = new Cat("Jenny");
不可能的是将狗存储在猫数组中,反之亦然。所以以下不起作用:
cats[1] = new Dog("Tommy"); or dogs[1] = new Cat("Tammy");
但是,如果您想在数组中包含不同的动物,则该数组必须是要存储在其中的所有动物的超类类型
Animal[] pets = new Animal[3];
pets[0] = new Dog("Bobby");
pets[1] = new Cat("Cathy");
pets[2] = new Fish("Nemo");
正如评论和上面的答案中已经提到的,Object是java中所有类的超级类。即使您编写自己的类,它也会扩展对象类。
下面的东西是等价的:
class MyOwnClass { ... }
class MyOwnClass extends Object { ... }
这意味着即使没有明确说明,每个类都会扩展对象类。因此,如果 object 是所有其他类的超类,您可以在类型为 object 的数组中执行与对 animal 数组所做的相同的操作。也就是说,里面存放不同的动物种类。因此(因为所有类都继承自该对象),以下适用,即使它没有多大意义
Object[] objects = new Object[6];
objects [0] = "Some String";
objects [1] = 42;
objects [2] = Double.NEGATIVE_INFINITY;;
objects [3] = new Dog("Bobby");
objects [4] = new Cat("Cathy");
objects [5] = new File("C:\\temp\\test.txt");
添加回答
举报