为什么Java中的函数默认是虚拟函数,而C#的不是?我搜到的资料解释是,Java是编译成字节码,函数地址是后绑定的,不存在Virtual Method Table。是这个原因吗?可这和函数地址的绑定有什么关系?为什么一定要后绑定呢?C#的程序也是编译成IL,为什么C#不学Java把所有函数默认为虚拟方法呢?

解决方案 »

  1.   

    虚拟数定位会影响性能,为什么java还要那么做?
      

  2.   

    简单。
    通过jvm的不断改进来提高性能。
    在jvm层可以优化
      

  3.   

    照这样说java是有Virtual Method Table的?
      

  4.   

    C++                    Java
    虚函数     --------   普通函数
    纯虚函数   --------   抽象函数
    抽象类     --------   抽象类
    虚基类     --------   接口
      

  5.   

    C#的普通实例方法 = Java的final实例方法, 即不可被复写.C#的virtual实例方法 = Java的普通实例方法, 可以被复写.两家公司恶性竞争搞出点不一样的花样而已...如果这也要讨论, 那为什么不讨论一下C#继承用:符号,  Java用extends关键字, 有必要吗???