将任意值分配给对象类型

时间:2015-12-27 20:37:18

标签: java object

我对以下代码有疑问:

Object o;
o = "Some string";
System.out.println(o.toString());   //Some string
o = 666;
System.out.println(o.toString());   //666

为什么可以在没有任何演员表的情况下打印对象的内容?它真的是如此通用的容器吗?

3 个答案:

答案 0 :(得分:4)

这只是因为多态性。 Object定义方法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().

如果没有在Object中定义toString()方法,则必须进行强制转换。

答案 1 :(得分:0)

SELECT * FROM message WHERE '$uid' = ANY (to);方法是在Object类上定义的,所以从某种意义上说,它确实是一个'通用'容器。

但是,与任何特定对象相关的许多有用功能都在对象的子类型的引用中。将字符串分配给对象后,您无法访问toString()之类的内容。您可以使用Object引用访问的功能是有限的。

答案 2 :(得分:0)

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

可以说它不是通用容器。原始类型不是Object

在您的示例中,您要存储从String继承的IntegerObject。由于Object具有toString()方法,因此您无需进行投射。