解决方案 »
- Axis webservice 异常问题
- ibatis updateByExample相关
- struts spring hibernate 配置问题 请赐教
- uddi与wsdl关系
- 关于Jackrabbit的ObjectPersistenceManager的问题
- [Microsoft][SQLServer 2000 Driver for JDBC]Connection reset by peer: socket write error
- JBoss部署同一应用到不同虚拟主机发生class冲突
- JBuilder与weblogic配置的怪问题
- 菜鸟初学JAVA,请教关于参数的问题
- QQ第三方登录出错
- 快速学习Java?
- 在sun主页下载的j2ee附带glassfish使用中的问题
应用考虑的只是功能和效率
Parent p = new Child();
String str = p.test();
这里只是简单地发生了运行时地动态绑定.我理解的应该是JVM会在对象的运行时确定是要调哪个函数.这个就只是一个语言特性吧.LZ把它想复杂了
再Parent p = new Child();
p.v;
( (Child) p ).v;
会发生很多有趣的事情.
从C的角度来考虑java,那么java里的抽象方法和接口方法,都属于纯虚方法,也就是只有定义,没有实体。因为纯虚在C里被称为抽象,所以java里没有纯虚概念,只有抽象概念。
所以java里没有C的所谓的“虚”方法,即抽象方法或接口方法,不能有实体。但java的一般方法的实现却采用C的虚方法的机制,即java的方法也是通过VTable(虚表)管理的,LZ可以试着用javap反编译class文件,可以看到函数调用的地方都会有virtual关键字。所以,从这个角度上来说,可以说java的方法全是虚方法。
你说的对啊,可是Parent和Child都没有任何地方有“虚”的含义啊!
而什么动态绑定啊,多态啊,都是“虚”的概念。
所以我说:java没有虚函数,或者说java里面全是虚函数!
受教了!楼上有些朋友要理解,确实有很多从c-》java 的。多种语言相互比较是学习的好方法,能融会贯通、加深理解。
需要abstract声明 还有虚类
LZ可以百度一下
abstract声明的和虚函数概念无关
abstract声明的只是为了让编译器进行检测该句代码有没有被强制覆盖