Sobes.tech
Junior — Middle

Чӣ гуна фарқият дорад пайвастагии статикӣ ва динамикӣ дар Java ва хусусиятҳои онҳо чист?

sobes.tech AI

Ҷавоб аз AI

Javaда, статик ва динамик усулларининг боғланиши, қачон аниқ методни чақириш учун танланиши вақти билан фарқ қилади.

  • Статик боғланиш (static binding) компиляция вақтида юз беради. Бу статик методлар, хусусий методлар ва финал методлар чақириқларини ўз ичига олади. Компилятор қайси методни чақириш кераклигини билади ва чақириқни аниқ бир амалга ошириш билан боғлайди.

  • Динамик боғланиш (dynamic binding) дастур ишга туширилганда юз беради. Бу виртуал методлар (одатда, мисол методлари) учун хос бўлиб, уларни подклассларда қайта ёзиш мумкин. JVM ишга тушириш вақтида, объектнинг ҳақиқий турига асосланиб, қайси методни чақириш кераклигини аниқлайди.

Масалан:

class Animal {
    void sound() {
        System.out.println("Баъзида овоз");
    }
    static void staticMethod() {
        System.out.println("Animalда статик метод");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("Чиққираётган");
    }
    static void staticMethod() {
        System.out.println("Dogда статик метод");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal a = new Dog();
        a.sound(); // динамик боғланиш, Dog.sound() чақирилади
        a.staticMethod(); // статик боғланиш, Animal.staticMethod() чақирилади
    }
}

Хулоса қилиб айтганда, динамик боғланиш полиморфизмни таъминлайди, статик боғланиш эса тезроқ ва олдиндан билган ҳолда ишлаш имконини беради, улар қайта ёзилмайдиган методлар учун.