日期:2014-05-19  浏览次数:20709 次

java中的“虚函数”
本帖最后由 sunmoon631 于 2011-05-28 17:58:40 编辑 java中是否有“虚函数”,请教高人讲解一下:

我的理解是这样

C++                    Java
虚函数     --------   
纯虚函数   --------   抽象方法
抽象类     --------   抽象类
虚基类     --------   接口

有高人能详细的讲解一下,很感谢。
------最佳解决方案--------------------
从C的角度来考虑,那么java里除了抽象方法(或接口)外,都是虚函数
如果你非要这么一一对等,那么C的虚方法 -- java的一般方法
以前有人讨论过这个问题,把链接发给你,可以参考一下
http://topic.csdn.net/u/20110223/13/db22aa47-e910-4a1b-bd0d-4cf53523f360.html
------其他解决方案--------------------
引用:
引用:
java中没有虚函数一说。。。不用再抠了



引用:

引用:
这样比较没有任何意义


现在不谈c++和java比较这个话题。


怎么理解java中的 虚函数


我曾经遇到过个高人,他的观点是 java中 有虚函数,
我原来的观点是 java中不存在虚……

有没有是看问题的角度决定的,java语言肯定没有虚函数这个概念。但是实现上可以和c++的虚函数类比下。再有,可以看看jvm指令集中的invokevirtual,virtual这个名字……
------其他解决方案--------------------
无论是java语言规范还是java虚拟机规范中都找不到“虚函数”一词,所以,你这个所谓的“高手”,可能是个c++高手,肯定not java


引用:
引用:
引用:

引用:
java中没有虚函数一说。。。不用再抠了



引用:

引用:
这样比较没有任何意义


现在不谈c++和java比较这个话题。


怎么理解java中的 虚函数


……

------其他解决方案--------------------
c++中默认是静态绑定,想要运行时绑定,就得告诉编译器(声明为virtual)
java中默认是动态绑定,想要静态绑定,就告诉编译器(声明为final)
------其他解决方案--------------------
引用:
引用:
c++中默认是静态绑定,想要运行时绑定,就得告诉编译器(声明为virtual)
java中默认是动态绑定,想要静态绑定,就告诉编译器(声明为final)


分析的很好,很感谢你的回答,感谢!

这里还要注意一下final和C的非虚函数还是有区别的,final就意味着该方法不能被子类重写,而C的非虚函数是可以被子类重写的。其实java和C是没有也没必要一一对等,只能说某些实现上相同或相似,关键是理解每个所谓的概念就好了。
------其他解决方案--------------------
这样比较没有任何意义
------其他解决方案--------------------
java不能总去和c++ 去比较,只要能理解就行了
------其他解决方案--------------------
这样比较没有意义,只能说明LZ没有理解面向对象
------其他解决方案--------------------
在c++中 不是只有使用指针才有多态吗 
------其他解决方案--------------------
java中没有虚函数一说。。。不用再抠了


引用:
引用:
这样比较没有任何意义


现在不谈c++和java比较这个话题。


怎么理解java中的 虚函数

------其他解决方案--------------------
虚基类和接口关联比较牵强。
------其他解决方案--------------------
有多态,多态内有虚方法
------其他解决方案--------------------
个人觉得非要类比的话,java中只要是非final类型的方法都可以理解为虚函数。

都是可以被覆盖的。
------其他解决方案--------------------
不要想着啥都去找个对应的东西,在java中真还没听过虚函数这种说法
------其他解决方案--------------------
引用:
这样比较没有任何意义