Java 将任意值分配给对象类型

Java 将任意值分配给对象类型,java,object,Java,Object,我对以下代码有一个问题: Object o; o = "Some string"; System.out.println(o.toString()); //Some string o = 666; System.out.println(o.toString()); //666 为什么对象的内容可以在不使用任何类型转换的情况下打印?它真的是这样一个通用的容器吗?toString()方法是在对象类上定义的,因此,从某种意义上说,它真的是这样一个“通用”容器 但是,与任何特定对象关联的许多有

我对以下代码有一个问题:

Object o;
o = "Some string";
System.out.println(o.toString());   //Some string
o = 666;
System.out.println(o.toString());   //666
为什么对象的内容可以在不使用任何类型转换的情况下打印?它真的是这样一个通用的容器吗?

toString()方法是在对象类上定义的,因此,从某种意义上说,它真的是这样一个“通用”容器

但是,与任何特定对象关联的许多有用功能都存在于对象子类型的引用中。一旦为对象分配了字符串,就无法访问类似
substring()
的内容。使用对象引用可以访问的功能有限。

来自:
类对象是类层次结构的根。每个类都有对象作为超类。所有对象(包括数组)都实现此类的方法

可以说,它不是一个通用的容器。基本类型不是
对象


在您的示例中,您正在存储从
对象继承的
字符串
整数
。由于
Object
具有
toString()
方法,因此不需要强制转换它。

这只是由于多态性。对象定义方法toString(),并在String和Integer中重写该方法

Object o;
o = "Some string";                  // o is now a String.
System.out.println(o.toString());   // so calls String::toString().
o = 666;                            // o is now an Integer.
System.out.println(o.toString());   // so calls Integer::toString().
如果对象中没有定义toString()方法,则可能需要强制转换