变量实际引用的是子类对象,而子类对象中覆盖(也可以说成是重写)了父类的方法,这时父类对象调用的是子类中的方法,这时候就成为虚方法调用
下面一个小栗子
class TestVirtualInvoke{
static void doStuff(Shape s )
{
s.draw();
}
public static void main( )
{ Circle c = new Circle();
Triangle t = new Triangle();
c.doStuff();
t.doStuff();
}
}
class Shape{
void draw()
{ System.out.println("Shape Drawing");
}
}
class Circle extends Shape{
void draw()
{
System.out.println(" Circle Drawing");
}
}
class Triangle{
void draw()
{System.out.println("Triangle Drawing");
}
}
运行结果
Circle Drawing
Triangle Drawing