Sobes.tech
Junior — Middle

Jak se liší statické a dynamické vázání metod v Javě a jaké jsou jejich vlastnosti?

sobes.tech AI

Odpověď od AI

V jazyce Java se liší statické a dynamické vázání metod tím, kdy dochází k výběru konkrétní implementace metody pro volání.

  • Statické vázání (static binding) nastává během kompilace. Patří sem volání statických metod, soukromých metod a finálních metod. Kompilátor ví, kterou metodu volat, a váže volání na konkrétní implementaci.

  • Dynamické vázání (dynamic binding) se děje během běhu programu. Je charakteristické pro virtuální metody (běžné instance metody), které mohou být přepsány v podtřídách. JVM při běhu určuje, kterou metodu volat na základě skutečného typu objektu.

Příklad:

class Animal {
    void sound() {
        System.out.println("Nějaký zvuk");
    }
    static void staticMethod() {
        System.out.println("Statická metoda v Animal");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("Štěkání");
    }
    static void staticMethod() {
        System.out.println("Statická metoda v Dog");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal a = new Dog();
        a.sound(); // dynamické vázání, volá Dog.sound()
        a.staticMethod(); // statické vázání, volá Animal.staticMethod()
    }
}

Stručně řečeno, dynamické vázání zajišťuje polymorfismus, zatímco statické nabízí rychlejší a předvídatelnější chování pro metody, které nelze přepsat.