从书上看下面这个代码片断应该是个虚拟方法的调用,不过不明白拿来干什么?
Class Employee
{
  public string a(){return "I am"}
}
Class Manager extends Employee
{
  public string a(){return super.a()+"a man."}
}
//下面是主类里用虚拟方法的片断
Employee epy=new Manager();
e.a();

解决方案 »

  1.   

    以上的程序无论是在c++中还是在java中都是输出I am a man。也就是所谓的动态联编或运行时联编。编译器使用vptr来实现的,每个对象都有一个
    vptr指向一个v-table,v-table是该类的函数列表,当实例化一个类时,先调用父类,
    的constructor,vptr此时指向父类的v-table,接着调用子类的初始化部分,这是vptr
    就指向子类的-table,故程序总是能调用正确的函数。
      

  2.   

    是用到覆盖的概念(子類的用完全相同的Method() overwrite父類的Method() )
    不是多態的的概念(同一類中寫名字相同的Method(),但其parameters是不同的)