Como se diferenciam a ligação estática e dinâmica de métodos em Java e quais são as suas características?
sobes.tech IA
Resposta da IA
Em Java, a ligação estática e dinâmica de métodos difere no momento em que a implementação específica do método é escolhida para a chamada.
-
Ligação estática (static binding) ocorre durante a compilação. Inclui chamadas a métodos estáticos, privados e finais. O compilador sabe qual método chamar e liga a chamada a uma implementação concreta.
-
Ligação dinâmica (dynamic binding) ocorre em tempo de execução do programa. É característica de métodos virtuais (métodos de instância normais), que podem ser sobrescritos em subclasses. A JVM, em tempo de execução, determina qual método chamar com base no tipo real do objeto.
Exemplo:
class Animal {
void sound() {
System.out.println("Algum som");
}
static void staticMethod() {
System.out.println("Método estático em Animal");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("Latido");
}
static void staticMethod() {
System.out.println("Método estático em Dog");
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Dog();
a.sound(); // ligação dinâmica, chamará Dog.sound()
a.staticMethod(); // ligação estática, chamará Animal.staticMethod()
}
}
Resumindo, a ligação dinâmica fornece polimorfismo, enquanto a estática oferece um funcionamento mais rápido e previsível para métodos que não podem ser sobrescritos.