2012-10-05 14 views
22

Si no hay un enlace de tiempo de compilación en java, ¿significa esto que todas las vinculaciones se realizan en tiempo de ejecución?¿Todos los métodos en Java son implícitamente virtuales?

Pero según OOPs concepto de tiempo de ejecución para la unión, debe tener funciones virtuales keyword..ARE implícitamente todos los métodos virtuales de java o hay existe ningún enlace de tiempo de compilación en Java

Si hay que obligue a cualquier tiempo de compilación, puede me das alguna situación específica, o enlaces a más información

  1. estático (no hay sentido de la unión aquí como estático no pertenece al objeto)
  2. final (esto no es un punto válido, ya que puede ser logrado de otra manera)
+1

"no hay encuadernación de tiempo de compilación en java" - no es cierto. Claro, la * implementación * se selecciona en el momento de la ejecución, pero la resolución de sobrecarga y el simple hecho de verificar el método existe y es accesible me suena como un enlace en tiempo de compilación. Tal vez te refieres a algo diferente por el término "vinculante" dado tu último párrafo. –

Respuesta

34

Todos los métodos que no sean static, no final y no private son virtuales por defecto en Java. Sin embargo, JVM es lo suficientemente inteligente como para encontrar que las clases solo tienen una implementación de un método determinado y convertirlo en enlace estático.

De esta manera no tiene que recordar la palabra clave virtual (¿Alguna vez se olvidó la pérdida de memoria debido a virtual faltante en destructor en C++?) Mientras que el rendimiento no se ve tan afectado.

+1

Ya cómo podemos probar que el método no estático, no privado es virtual. – Arun

+7

@Arun No es necesario que lo demuestres, así es como se define el idioma. Si lo desea, puede buscarlo en [Especificación del lenguaje Java] (http://docs.oracle.com/javase/specs/). – Jesper

5

La invocación de método no estático es el principal (único) aspecto dinámico de Java. Todos los métodos son virtuales en Java. Esto no se aplica a los métodos estáticos, que están vinculados en tiempo de compilación, en función del tipo de objeto estático.

4

Definición de Virtual del wiki:

En la programación orientada a objetos, una función virtual o método virtual es una función o un método cuyo comportamiento puede ser anulado dentro de una clase que hereda por una función con la misma firma para proporcionar el comportamiento polimórfico.

Por lo tanto, según la definición, cada método no estático en JAVA es por defecto el método virtual, excepto los métodos finales y privados. Los métodos que no se pueden heredar para el comportamiento polimórfico no son un método virtual.

0

Los métodos que no podemos anular en la clase secundaria generalmente se llaman métodos no virtuales.

En Java estático, los métodos finales privados & no son virtuales por defecto. Otros métodos son virtuales por defecto.

Cuestiones relacionadas