Sobes.tech
Назад к вопросам
Junior — Middle
65

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

Компании, где спрашивали
Effective Mobile

Ответ от нейросети

sobes.tech AI

Статические методы в Java принадлежат самому классу, а не экземплярам. Они вызываются через имя класса и не могут быть переопределены в дочерних классах, поскольку не участвуют в полиморфизме.

В отличие от них, методы, которые можно переопределять (нестатические), принадлежат объектам и поддерживают динамический полиморфизм. При вызове метода через ссылку на базовый класс фактическая реализация определяется типом объекта во время выполнения.

Пример:

class Parent {
    static void staticMethod() {
        System.out.println("Parent static method");
    }
    void instanceMethod() {
        System.out.println("Parent instance method");
    }
}

class Child extends Parent {
    static void staticMethod() {
        System.out.println("Child static method");
    }
    @Override
    void instanceMethod() {
        System.out.println("Child instance method");
    }
}

public class Test {
    public static void main(String[] args) {
        Parent p = new Child();
        p.staticMethod();      // Выведет: Parent static method
        p.instanceMethod();    // Выведет: Child instance method
    }
}

Здесь статический метод вызывается по типу ссылки (Parent), а нестатический — по типу объекта (Child).