这是一个例子。假设我们有2个类别:
class A { public String getName() { return "A"; }}class B extends A { public String getName() { return "B"; }}如果我们现在执行以下操作:
public static void main(String[] args) { A myA = new B(); System.out.println(myA.getName());}我们得到结果
B
如果Java没有
virtual methodinvocation,它将在编译时确定
getName()要调用的是属于
A该类的。既然不是,而是在运行时根据所
myA指向的实际类来确定,则可以得到以上结果。
[编辑以添加(略有捏造)示例]
您可以使用此功能编写一个方法,该方法将任意数量的
Objects作为参数并按如下所示打印它们:
public void printObjects(Object... objects) { for (Object o: objects) { System.out.println(o.toString()); }}这将适用于任何对象混合。如果Java没有
virtual methodinvocation,则所有对象都将使用
toString()不太可读的对象打印。现在,
toString()将使用每个实际类的,这意味着打印输出通常更具可读性。



