JavaRush /Blog Java /Random-ES /Diferencias entre enlace temprano y tardío en Java

Diferencias entre enlace temprano y tardío en Java

Publicado en el grupo Random-ES
Para comprender la diferencia entre el enlace temprano (estático) y el tardío (dinámico) en Java, primero debe comprender qué es el enlace . Vincular significa que hay una conexión entre el enlace y el código. Por ejemplo, una variable a la que hace referencia está vinculada al código en el que está definida. Asimismo, el método que se llama está vinculado a la ubicación en el código donde está definido.
Diferencias entre enlace temprano y tardío en Java - 1
Hay dos tipos de enlace de métodos en el lenguaje Java: enlace temprano (también llamado estático) y enlace tardío (respectivamente, dinámico) . Llamar a un método en Java significa que el método está vinculado a un código específico, ya sea en tiempo de compilación o en tiempo de ejecución, cuando se ejecuta el programa y se crean los objetos. Como sugiere el nombre, el enlace estático es de naturaleza más estática, ya que ocurre en el momento de la compilación, lo que significa que el código "sabe" qué método llamar después de compilar el código fuente de Java en archivos de clase. Y dado que esto se refiere a una etapa temprana del ciclo de vida del programa, también se le llama enlace anticipado. Por otro lado, el enlace dinámico se produce en tiempo de ejecución, después de que la máquina virtual Java ejecuta el programa. En este caso, el método a llamar está determinado por el objeto específico, por lo que la información no está disponible en tiempo de compilación porque los objetos se crean en tiempo de ejecución. Y dado que esto sucede en una etapa avanzada del ciclo de vida del programa, en Java se denomina enlace tardío.
Entonces, la diferencia fundamental entre el enlace estático y el dinámico en Java es que el primero ocurre temprano, en el momento de la compilación, según el tipo de variable de referencia, y el segundo ocurre más tarde, en el tiempo de ejecución, utilizando objetos concretos.
Veamos algunas diferencias más para comprender esto mejor y también poder responder esta pregunta muy popular que se hace en las entrevistas de Java.

Enlace temprano y tardío en Java

Existen muchas diferencias entre el enlace estático y dinámico en Java, pero la más importante es cómo los usa la JVM. ¿Alguna vez te has preguntado cómo decide la JVM qué método llamar cuando hay más de un método con el mismo nombre en el alcance? Si alguna vez ha utilizado la sobrecarga o anulación de métodos, sabrá que en Java puede tener varios métodos con el mismo nombre. En el caso de Java, la JVM utiliza enlaces estáticos y dinámicos para seleccionar el método deseado.

Ejemplo de enlace estático y dinámico en Java

En este programa, verá que la vinculación de métodos virtuales no ocurre en tiempo de compilación usando vinculación estática, ya que esto llamaría a un método de la superclase, como sucede con los métodos estáticos que se vinculan tempranamente. Si se llama a un método de una subclase, se usó un objeto específico para vincular la función en tiempo de ejecución y, por lo tanto, se usa el enlace dinámico para vincular funciones virtuales.
public class Main {
  public static void main(String[] args) {

    // Пример статического и динамического связывания в Java
    Insurance current = new CarInsurance();

    // Динамическое связывание на основе un objetoа
    int premium = current.premium();

    // Статическое связывание на основе класса
    String category = current.category();

    System.out.println("premium : " + premium);
    System.out.println("category : " + category);
  }
}

class Insurance{
  public static final int LOW = 100;

  public int premium(){
    return LOW;
  }

  public static String category(){
    return "Insurance";
  }

}

class CarInsurance extends Insurance{
  public static final int HIGH = 200;

  public int premium(){
    return HIGH;
  }

  public static String category(){
    return "Car Insurance";
  }

}
Результаты выполнения:

premium : 200
category : Insurance
Como puede ver, una llamada a un método premium()resultó en la ejecución de un método de la subclase, mientras que una llamada a un método category()resultó en la ejecución de un método de superclase. Esto se debe a que premium()- es un método virtual, que se resuelve mediante enlace tardío, mientras que category()- es un método estático, que se resuelve mediante enlace estático en tiempo de compilación por nombre de clase.
¿Interesado en leer sobre Java? ¡ Únase al grupo de desarrolladores de Java !

Diferencias entre enlace temprano y tardío en Java

Ahora que sabe cómo Java vincula las llamadas a métodos y cómo funciona el enlace estático y dinámico, recapitulemos las diferencias clave entre el enlace temprano y el tardío en Java:
  1. Los enlaces estáticos se producen en tiempo de compilación, mientras que los enlaces dinámicos se producen en tiempo de ejecución.

  2. Debido a que el enlace estático ocurre temprano en el ciclo de vida de un programa, se llama enlace temprano. De manera similar, el enlace dinámico también se denomina enlace tardío porque ocurre más adelante en la ejecución del programa.

  3. El enlace estático se utiliza en el lenguaje Java para resolver métodos sobrecargados, mientras que el enlace dinámico se utiliza en el lenguaje Java para resolver métodos anulados.

  4. Del mismo modo, los métodos privados, estáticos y de terminal se resuelven mediante enlace estático porque no se pueden anular, mientras que todos los métodos virtuales se resuelven mediante enlace dinámico.

  5. En el caso del enlace estático, no se utilizan objetos concretos, sino información de tipo, es decir, el tipo de variable de referencia se utiliza para descubrir el método deseado. Por otro lado, el enlace dinámico utiliza un objeto específico para encontrar el método deseado en Java.
Aquí hay un buen ejercicio basado en los conceptos de enlace estático y dinámico en Java. ¿Puede responder la pregunta: "¿Qué se obtendrá cuando se ejecute el siguiente programa?"
Diferencias entre enlace temprano y tardío en Java - 2
¿Qué producirá este programa? Collection, Seto HashSet? Eso es todo lo que queríamos contarle sobre las diferencias entre el enlace temprano (estático) y el tardío (dinámico) en Java. Esta es una de las mejores preguntas de una entrevista telefónica sobre Java porque brinda bastantes oportunidades para probar el conocimiento profundo del candidato. Recuerde siempre que los métodos privados , estáticos y finales se vinculan mediante enlaces estáticos , mientras que los métodos virtuales se vinculan mediante enlaces dinámicos . Del mismo modo, el mejor ejemplo de enlace estático es la sobrecarga de métodos, mientras que la anulación es dinámica. Fuente
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION