何为虚拟方法?何为虚拟方法调用呢?
子类中定义了与父类同名同参数的方法,在多态的情况下,此时父类
中得方法被称为虚拟方法。父类根据赋给的不同子类对象,动态的调
用属于子类的该方法即为虚拟方法调用。这种方法调用在编译期是无法确定的。
以下是正常方法调用与虚拟方法调用的区别:
正常方法调用:
//这里的Student类是Person类的子类
> Person p = new Person();
> p.study(); //Person类中得study()方法
> Student s = new Student();
> s.study(); //Student类中得study()方法
虚拟方法调用(在多态情况下):
> Person ps = new Student();
> ps.study(); //调用的是Student类中得study()方法
编译时类型和运行时类型:
编译时 ps 的类型为 Person 类型,而方法的调用是运行时决定的,所以在运行时调用的
是 Student 类中得 study() 方法。这种过程叫做动态绑定。