Sobes.tech
Junior — Middle

Kaip skiriasi statinis ir dinaminis metodų susiejimas Java ir kokios yra jų ypatybės?

sobes.tech AI

Atsakymas iš AI

Java kalba, statinio ir dinaminio metodų ryšio skirtumas tas, kada yra pasirenkama konkreti metodo įgyvendinimo versija.

  • Statinis ryšys (static binding) vyksta kompiliacijos metu. Tai apima statinių metodų, privačių metodų ir finalinių metodų iškvietimus. Kompiliatorius žino, kurį metodą iškviesti, ir susieja iškvietimą su konkrečia įgyvendinimu.

  • Dinaminis ryšys (dynamic binding) vyksta programos vykdymo metu. Tai būdinga virtualiems metodams (įprastiems instancijos metodams), kurie gali būti perrašyti pogrupiuose. JVM vykdymo metu nustato, kurį metodą iškviesti, remiantis objekto tikruoju tipu.

Pavyzdys:

class Animal {
    void sound() {
        System.out.println("Kai kurių garsų");
    }
    static void staticMethod() {
        System.out.println("Animal statinis metodas");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("Laižymas");
    }
    static void staticMethod() {
        System.out.println("Dog statinis metodas");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal a = new Dog();
        a.sound(); // dinaminis ryšys, iškvies Dog.sound()
        a.staticMethod(); // statinis ryšys, iškvies Animal.staticMethod()
    }
}

Apibendrinant, dinaminis ryšys užtikrina polimorfizmą, o statinis — greitesnį ir prognozuojamesnį veikimą metodų, kurie negali būti perrašyti.