Cum se diferențiază legarea statică și dinamică a metodelor în Java și care sunt caracteristicile lor?
sobes.tech AI
Răspuns de la AI
În Java, legătura statică și dinamică a metodelor diferă în momentul în care se alege implementarea specifică a metodei pentru apel.
-
Legătura statică (static binding) are loc în timpul compilării. Aceasta include apelurile la metode statice, private și finale. Compilatorul știe ce metodă să apeleze și le leagă apelul de o implementare concretă.
-
Legătura dinamică (dynamic binding) are loc în timpul execuției programului. Este caracteristică metodelor virtuale (metode obișnuite de instanță), care pot fi suprascrise în subclase. JVM, în timpul execuției, determină ce metodă să apeleze, pe baza tipului real al obiectului.
Exemplu:
class Animal {
void sound() {
System.out.println("Unele sunete");
}
static void staticMethod() {
System.out.println("Metoda statică în Animal");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("Lătrat");
}
static void staticMethod() {
System.out.println("Metoda statică în Dog");
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Dog();
a.sound(); // legătură dinamică, va apela Dog.sound()
a.staticMethod(); // legătură statică, va apela Animal.staticMethod()
}
}
Pe scurt, legătura dinamică asigură polimorfismul, în timp ce legătura statică oferă o funcționare mai rapidă și previzibilă pentru metodele care nu pot fi suprascrise.