Sobes.tech
Junior — Middle

Как се различават статичните методи в обектно-ориентираното програмиране от методите, които се презаписват в наследяващите класове?

sobes.tech AI

Отговор от AI

Статичните методи в Java принадлежат на самия клас, а не на екземплярите. Те се извикват чрез името на класа и не могат да бъдат презаписвани в наследяващите класове, тъй като не участват в полиморфизма.

За разлика от тях, методите, които могат да бъдат презаписвани (нестатичните), принадлежат на обектите и поддържат динамичен полиморфизъм. При извикване на метод чрез препратка към базовия клас, реалната реализация се определя от типа на обекта по време на изпълнение.

Пример:

class Parent {
    static void staticMethod() {
        System.out.println("Статичен метод на Parent");
    }
    void instanceMethod() {
        System.out.println("Метод на инстанция на Parent");
    }
}

class Child extends Parent {
    static void staticMethod() {
        System.out.println("Статичен метод на Child");
    }
    @Override
    void instanceMethod() {
        System.out.println("Метод на инстанция на Child");
    }
}

public class Test {
    public static void main(String[] args) {
        Parent p = new Child();
        p.staticMethod();      // Изход: Статичен метод на Parent
        p.instanceMethod();    // Изход: Метод на инстанция на Child
    }
}

Тук статичният метод се извиква по типа на препратката (Parent), а нестатичният — по типа на обекта (Child).