Object aThing = new Integer(25);
aThing.toString();
是toString
的{{1}}还是Object
的{{1}}? (我认为这是toString
的。)
答案 0 :(得分:3)
Integer
类toString()
。方法调用将始终基于Object类型而不是引用类型来决定。
正如Steve Kuo评论的那样:静态方法除外。
答案 1 :(得分:1)
调用子类中的那个,所以Integer
上的那个。
答案 2 :(得分:1)
toString()
的{{1}}是被调用的Integer
。
您可以使用自己的对象轻松证明这一点。
答案 3 :(得分:1)
toString()
,因为它是实例化类的类型。
答案 4 :(得分:1)
Integer's
toString
被调用。调用哪个方法实现始终由对象本身的运行时类型(类)确定,而不是由分配给它的变量类型确定。在以下代码中,两个调用都是等效的。
Integer i = Integer.valueOf(5);
Object o = i;
i.toString(); // "5"
o.toString(); // "5"
以这种方式行事的方法称为Virtual Methods。 Java中的所有非静态方法都是虚拟的。它们提供了Polymorphism的关键机制之一。