java中的所有方法都是隐式虚拟的

时间:2012-10-05 18:51:43

标签: java

如果java中没有编译时绑定,这是否意味着所有绑定都是在运行时完成的?

但是根据OOPs的运行时绑定概念,函数必须有虚拟关键字。在Java中隐式虚拟的所有方法或java中是否存在任何编译时绑定

如果有任何编译时绑定,您能否给我一些具体情况,或链接到更多信息

  1. 静态(此处没有绑定的意思,因为静态不属于对象)
  2. final(这不是一个有效点,因为它可以用另一种方式获得)

3 个答案:

答案 0 :(得分:38)

默认情况下,所有非static,非 - final和非 - private方法在Java中都是虚拟的。但是,JVM足够聪明,只能找到只有一个给定方法实现的类,并将其转换为静态绑定。

这样您就不必记住virtual关键字(由于C ++中的析构函数丢失virtual而经历过内存泄漏?),而性能不会受到太大影响。

答案 1 :(得分:5)

非静态方法调用是Java的主要(唯一)动态方面。所有方法都是Java虚拟的。这不适用于基于静态对象类型在编译时绑定的静态方法。

答案 2 :(得分:0)

我们无法在子类中覆盖的方法通常称为非虚方法。

在Java static,private&默认情况下,final方法是非虚拟的。其他方法默认为虚拟。