23

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

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

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

  1. 静态(这里没有绑定的意义,因为静态不属于对象)
  2. final (这不是一个有效点,因为它可以通过另一种方式实现)
4

3 回答 3

41

在 Java 中,所有 non- static、 non-final和 non-private方法默认都是虚拟的。然而,JVM 足够聪明,可以找到只有一种给定方法实现的类,并将其转换为静态绑定。

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

于 2012-10-05T18:54:56.777 回答
5

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

于 2012-10-05T18:56:46.210 回答
0

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

在 Java 中,默认情况下,私有和最终方法是非虚拟的。其他方法默认是虚拟的。

于 2017-02-06T07:03:26.117 回答