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.