【问题标题】:Are all method in java implictly virtualjava中的所有方法都是隐式虚拟的吗
【发布时间】:2012-10-05 18:51:42
【问题描述】:

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

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

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

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

【问题讨论】:

  • “java 中没有编译时绑定” - 不正确。当然,implementation 是在执行时选择的,但是重载决议和检查方法的简单行为存在并且可以访问,这听起来像是编译时绑定。鉴于您的最后一段,也许您的“约束力”一词的含义有所不同。

标签: java


【解决方案1】:

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

这样您就不必记住 virtual 关键字(是否曾因在 C++ 中的析构函数上缺少 virtual 而发生内存泄漏?),而性能不会受到太大影响。

【讨论】:

【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    在 Java 中,静态、私有和最终方法默认是非虚拟的。其他方法默认是虚拟的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 2016-04-30
      相关资源
      最近更新 更多