El enlace de la llamada al método con el cuerpo del método se conoce como enlace. Hay dos tipos de encuadernación: Enlace estático esto sucede durante la compilación e Asociación dinámica esto sucede en tiempo de ejecución. Antes de explicar la asociación estática y dinámica en Java, veamos algunos términos que lo ayudarán a comprender mejor este concepto.

¿Qué son referencia y objeto?

class Human{
....
}
class Boy extends Human{
   public static void main( String args[]) {
       /*This statement simply creates an object of class
        *Boy and assigns a reference of Boy to it*/  
       Boy obj1 = new Boy();

       /* Since Boy extends Human class. The object creation
        * can be done in this way. Parent class reference 
        * can have child class reference assigned to it
        */
       Human obj2 = new Boy();
   }
}

Enlace estático y dinámico en Java

Como se mencionó anteriormente, vincular la definición del método a la llamada al método se conoce como vinculación. Hay dos tipos de enlace: enlace estático y enlace dinámico. Vamos a hablar acerca de.

Enlace estático o enlace temprano

La asociación que el compilador puede resolver en tiempo de compilación se conoce como asociación estática o temprana. Se está compilando el enlace de métodos estáticos, privados y finales. ¿Por qué? La razón es que el método these no se puede anular y el tipo de clase se determina en tiempo de compilación. Veamos un ejemplo para entender esto:

Ejemplo de asociación estática

Aquí tenemos dos clases Human y Boy. Ambas clases tienen el mismo método walk () pero el método es estático, lo que significa que no se puede anular, por lo que, aunque utilicé el objeto de la clase Boy al crear el objeto obj, este llama al método de la clase principal. Porque la referencia es de tipo Humano (clase padre). Por lo tanto, siempre que se produce un enlace de métodos estáticos, privados y finales, el compilador determina el tipo de clase en el momento de la compilación y el enlace se produce en ese momento.

class Human{
   public static void walk()
   {
       System.out.println("Human walks");
   }
}
class Boy extends Human{
   public static void walk(){
       System.out.println("Boy walks");
   }
   public static void main( String args[]) {
       /* Reference is of Human type and object is
        * Boy type
        */
       Human obj = new Boy();
       /* Reference is of HUman type and object is
        * of Human type.
        */
       Human obj2 = new Human();
       obj.walk();
       obj2.walk();
   }
}

Producción:

Human walks
Human walks

Enlace dinámico o enlace tardío

Cuando el compilador no puede resolver la llamada / asociación en tiempo de compilación, esa asociación se conoce como asociación dinámica o tardía. Anular el método es un ejemplo perfecto de enlace dinámico, ya que al anular las clases padre e hijo tienen el mismo método y en este caso el tipo de objeto determina qué método se debe realizar. El tipo de objeto se determina en tiempo de ejecución, por lo que esto se conoce como enlace dinámico.

leer  Clase abstracta en Java con ejemplo

Ejemplo de asociación dinámica

Este es el mismo ejemplo que vimos anteriormente. La única diferencia aquí es que en este ejemplo, la anulación está realmente sucediendo ya que estos métodos son no estático, privado y final. En el caso de una anulación, la llamada al método anulado se determina en tiempo de ejecución por el tipo de objeto, por lo que se produce un enlace tardío. Veamos un ejemplo para entender esto:

class Human{
   //Overridden Method
   public void walk()
   {
       System.out.println("Human walks");
   }
}
class Demo extends Human{
   //Overriding Method
   public void walk(){
       System.out.println("Boy walks");
   }
   public static void main( String args[]) {
       /* Reference is of Human type and object is
        * Boy type
        */
       Human obj = new Demo();
       /* Reference is of HUman type and object is
        * of Human type.
        */
       Human obj2 = new Human();
       obj.walk();
       obj2.walk();
   }
}

Producción:

Boy walks
Human walks

Como puede ver, el resultado es diferente de lo que vimos en el ejemplo de enlace estático, porque en este caso, al crear el objeto obj, el tipo de objeto se determina como un tipo Boy, por lo que la clase Boy. Recuerde que el tipo de objeto se determina en tiempo de ejecución.

Enlace estático vs enlace dinámico

Hablemos de la diferencia entre el enlace estático y dinámico en Java.

  1. El enlace estático se produce en tiempo de compilación, mientras que el enlace dinámico se produce en tiempo de ejecución.
  2. El enlace de métodos privados, estáticos y finales siempre se produce en tiempo de compilación, ya que estos métodos no se pueden invalidar. Cuando la anulación del método está realmente en curso y la referencia de tipo principal se asigna al objeto de tipo de clase secundaria, esa asociación se resuelve en tiempo de ejecución.
  3. El enlace de métodos sobrecargados es estático y el enlace de métodos anulados es dinámico.
leer  Java - ¿Constructor en la interfaz?

Por avivcas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *