Sobes.tech
Junior — Middle

Czym różni się statyczne i dynamiczne wiązanie metod w Java i jakie są ich cechy?

sobes.tech AI

Odpowiedź od AI

W Javie, statyczne i dynamiczne wiązanie metod różnią się tym, kiedy wybierana jest konkretna implementacja metody do wywołania.

  • Statyczne wiązanie (static binding) następuje podczas kompilacji. Dotyczy wywołań metod statycznych, prywatnych i finalnych. Kompilator wie, którą metodę wywołać i wiąże wywołanie z konkretną implementacją.

  • Dynamiczne wiązanie (dynamic binding) ma miejsce podczas wykonywania programu. Dotyczy to metod wirtualnych (zwykłych metod instancji), które mogą być nadpisywane w podklasach. JVM podczas wykonywania określa, którą metodę wywołać, na podstawie rzeczywistego typu obiektu.

Przykład:

class Animal {
    void sound() {
        System.out.println("Jakiś dźwięk");
    }
    static void staticMethod() {
        System.out.println("Statyczna metoda w Animal");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("Szczekanie");
    }
    static void staticMethod() {
        System.out.println("Statyczna metoda w Dog");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal a = new Dog();
        a.sound(); // wiązanie dynamiczne, wywoła Dog.sound()
        a.staticMethod(); // wiązanie statyczne, wywoła Animal.staticMethod()
    }
}

Podsumowując, dynamiczne wiązanie zapewnia polimorfizm, a statyczne — szybszą i bardziej przewidywalną pracę dla metod, które nie mogą być nadpisywane.