如果java中没有编译时绑定,这是否意味着所有绑定都是在运行时完成的?
但是根据OOPs的运行时绑定概念,函数必须有虚拟关键字。在Java中隐式虚拟的所有方法或java中是否存在任何编译时绑定
如果有任何编译时绑定,您能否给我一些具体情况,或链接到更多信息
答案 0 :(得分:38)
默认情况下,所有非static
,非 - final
和非 - private
方法在Java中都是虚拟的。但是,JVM足够聪明,只能找到只有一个给定方法实现的类,并将其转换为静态绑定。
这样您就不必记住virtual
关键字(由于C ++中的析构函数丢失virtual
而经历过内存泄漏?),而性能不会受到太大影响。
答案 1 :(得分:5)
非静态方法调用是Java的主要(唯一)动态方面。所有方法都是Java虚拟的。这不适用于基于静态对象类型在编译时绑定的静态方法。
答案 2 :(得分:0)
我们无法在子类中覆盖的方法通常称为非虚方法。
在Java static,private&默认情况下,final方法是非虚拟的。其他方法默认为虚拟。