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

Типичные ошибки

Справочник ошибок при работе с классами и объектами

Забыли точку с запятой после класса

В Idyllium после тела класса нужна точка с запятой. Эту ошибку легко пропустить, но компилятор о ней сообщит.

main.idyl:5: error: expected ';' after class definition

Исправление: добавить ; после закрывающей фигурной скобки класса.

Обращение к нестатическому члену из статического метода

Статические методы не имеют доступа к this и нестатическим свойствам/методам класса.

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

Исправление: либо сделайте метод нестатическим, либо передавайте нужные данные как параметры.

Попытка обратиться к приватному свойству извне

Свойства, объявленные как private, доступны только внутри методов класса. Из main() или других классов к ним обратиться нельзя.

main.idyl:9: error: 'balance' is private in this context

Исправление: создайте публичные методы set_balance() и get_balance() для доступа к приватному свойству.

Класс не найден (забыли подключить файл)

Если класс объявлен в другом файле, его нужно подключить через use.

main.idyl:2: error: 'Cat' was not declared in this scope

Исправление: добавить use cat; в начало файла.

Циклическая зависимость файлов

Нельзя, чтобы файл A подключал B, а B подключал A. Это вызывает ошибку.

a.idyl:1: error: circular import detected: 'b'

Исправление: пересмотрите архитектуру проекта. Возможно, классы A и B нужно объединить или вынести общую часть в третий файл.

Использование static метода как нестатического

Статические методы вызываются через класс, а не через объект. Попытка вызвать их через объект приведёт к ошибке.

main.idyl:10: error: static method 'square' cannot be called on object

Исправление: вызывать статические методы через класс: MathUtils.square(5).

Итог

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