为了账号安全,请及时绑定邮箱和手机立即绑定

求Java内置Object类的解释

求Java内置Object类的解释

摇曳的蔷薇 2023-06-21 13:32:13
Object a[] = new Object[2];a[0] = "asd";a[1] = 1;我正在寻求解释这在 Java 中是如何实现的。我确实看过 Object 的实现,我必须寻求一些帮助才能理解它。创建一个可以保存任何类型的变量,例如Python是内置的,但在Java中我们需要Object类。在 Object 的实现中是什么允许它具有任何类型,请解释一下?
查看完整描述

2 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

让我们一步一步来:

  • Object是Java中所有引用类型的根源。凡是有参考价值的东西,也是instanceof Object

  • “显然”,a[0] = "asd";分配一个String。字符串默认是对象。

  • 最后, a[1] = 1;导致自动装箱。您正在将一个Integer对象分配给该数组槽,而不是原始int 值 1。

当然,这里还值得一提的是协方差。


查看完整回答
反对 回复 2023-06-21
?
紫衣仙女

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


查看完整回答
反对 回复 2023-06-21
  • 2 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信