¿En qué se diferencian la vinculación estática y dinámica de métodos en Java y cuáles son sus características?
sobes.tech AI
Respuesta de la IA
En Java, la vinculación estática y dinámica de métodos difiere en el momento en que se selecciona la implementación específica del método para llamar.
-
Vinculación estática (static binding) ocurre durante la compilación. Esto incluye llamadas a métodos estáticos, métodos privados y métodos finales. El compilador sabe qué método llamar y vincula la llamada con una implementación concreta.
-
Vinculación dinámica (dynamic binding) sucede en tiempo de ejecución del programa. Es característico de los métodos virtuales (métodos normales de instancia), que pueden ser sobrescritos en subclases. La JVM, en tiempo de ejecución, determina qué método llamar, basándose en el tipo real del objeto.
Ejemplo:
class Animal {
void sound() {
System.out.println("Algún sonido");
}
static void staticMethod() {
System.out.println("Método estático en Animal");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("Ladrido");
}
static void staticMethod() {
System.out.println("Método estático en Dog");
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Dog();
a.sound(); // vinculación dinámica, llamará a Dog.sound()
a.staticMethod(); // vinculación estática, llamará a Animal.staticMethod()
}
}
En resumen, la vinculación dinámica proporciona polimorfismo, mientras que la estática ofrece un trabajo más rápido y predecible para métodos que no pueden ser sobrescritos.