2012-10-05 24 views
22

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

但按照哎呀概念运行时绑定,函数必须具有虚拟keyword..ARE所有方法隐含在java虚拟还是有在java中

任何编译时绑定存在。如果有任何编译时绑定,可以你能给我一些具体的情况,或链接到进一步的信息

  1. 静态(没有在这里结合静态不属于对象的意思)
  2. 最终(这是不是因为它可以是一个有效点以另一种方式实现)
+1

“没有编译时绑定在java中” - 不正确。当然,*执行*是在执行时挑选出来的,但是重载解析和检查方法的简单行为存在并且可访问,听起来就像是编译时绑定到我的。或许你的意思是根据你最后一段的“绑定”这个词的意思。 –

回答

34

所有非static,非final和非private方法在Java中默认是虚拟的。然而,JVM足够聪明地找到只有一个给定方法实现的类,并将其转化为静态绑定。

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

+1

Ya我们如何证明非静态的,非私有的方法是虚拟的.. – Arun

+7

@Arun你不需要证明 - 这就是语言的定义。如果需要,可以在[Java语言规范](http://docs.oracle.com/javase/specs/)中查找它。 – Jesper

5

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

4

定义:

在面向对象的编程中,虚拟函数或虚拟方法是一个函数或方法,其行为可被继承类内由函数具有相同签名的覆盖,以提供多态行为。

因此根据定义,JAVA中的每个非静态方法都是默认的虚拟方法,除了final和private方法。无法为多态行为继承的方法不是虚拟方法。

0

我们无法在子类中重写的方法通常称为非虚拟方法。

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

相关问题