我对以下代码有疑问:
Object o;
o = "Some string";
System.out.println(o.toString()); //Some string
o = 666;
System.out.println(o.toString()); //666
为什么可以在没有任何演员表的情况下打印对象的内容?它真的是如此通用的容器吗?
答案 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
继承的Integer
和Object
。由于Object
具有toString()
方法,因此您无需进行投射。