Sobes.tech
Middle

Могат ли да се презапишат статичните методи в Java?

sobes.tech AI

Отговор от AI

Не, в Java не може да се презапише статични методи. Статичните методи принадлежат към класа, а не към конкретен екземпляр от обекта. Когато наследяваме статичен метод със същата сигнатура като този в суперкласа, това не е презаписване; това се нарича скриване (method hiding). Вика на статичен метод винаги се определя от типа на референцията, а не от типа на обекта.

class Parent {
    public static void staticMethod() {
        System.out.println("Статичен метод в Parent");
    }
}

class Child extends Parent {
    // Това не е презаписване, а скриване
    public static void staticMethod() {
        System.out.println("Статичен метод в Child");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent.staticMethod(); // Вика статичния метод на Parent
        Child.staticMethod();  // Вика статичния метод на Child

        Parent p = new Child();
        // Вика статичния метод на Parent, защото типът на референцията е Parent
        p.staticMethod();
    }
}

В този пример, въпреки че променливата p се отнася към обект Child, извикването p.staticMethod() извиква статичния метод на класа Parent. Това показва, че статичните методи не участват в изпълнителния полиморфизъм, който е характерен за презаписването.