Объектно-ориентированное программирование
Уроки Открыть IDE
На главную
ООП • Урок 11

Статические методы

Методы, которые принадлежат классу, а не объекту

Проблема: метод, которому не нужен объект

До сих пор все методы, которые мы писали, вызывались у конкретного объекта. Но что, если метод не использует никакие свойства объекта? Например, метод meow() у кота — он просто выводит «Мяу», не обращаясь к this.name или другим свойствам.

Создавать объект только для того, чтобы вызвать метод, который не использует свойства объекта — нелогично и накладно.

Решение: статический метод

Статический метод — это метод, который принадлежит не конкретному объекту, а самому классу. Для его вызова не нужно создавать объект — достаточно обратиться к классу.

Синтаксис: ключевое слово static перед объявлением метода.

Мяу

Метод вызван напрямую у класса Cat, без создания объекта.

Ограничение статических методов

Статический метод не имеет доступа к this. Он не связан ни с каким конкретным объектом, поэтому не может обращаться к нестатическим свойствам и методам класса.

main.idyl:6: error: 'this' cannot be used in static method

Статические методы могут работать только с:

  • своими локальными переменными
  • другими статическими методами
  • параметрами, переданными в метод

Практическое применение: вспомогательные функции

Статические методы идеально подходят для функций, которые логически относятся к классу, но не требуют объекта. Например, математические утилиты, конвертеры, фабричные методы.

Квадрат 5: 25 Куб 5: 125 5 чётное? false

Все эти методы не требуют создания объекта MathUtils — они вызываются напрямую у класса.

Сравнение: статический vs обычный метод

Характеристика Обычный метод Статический метод
Вызов объект.метод() Класс.метод()
Доступ к this ✅ есть ❌ нет
Доступ к нестатическим свойствам ✅ есть (через this) ❌ нет
Нужен ли объект? ✅ да ❌ нет

Когда использовать статические методы?

  • Метод не использует свойства объекта (не нужен this).
  • Метод выполняет вспомогательную функцию, логически связанную с классом.
  • Метод является «фабричным» — создаёт объекты определённым образом.
  • Метод не должен зависеть от состояния конкретного объекта.

Если метод обращается к свойствам объекта — он не должен быть статическим.

Итог

  • Статический метод принадлежит классу, а не объекту.
  • Вызывается через имя класса: ИмяКласса.метод().
  • Не имеет доступа к this и нестатическим членам класса.
  • Идеален для вспомогательных и утилитарных функций.