Sobes.tech
Junior — Middle

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.