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

Идентификатор this

Как методу узнать, какой объект его вызвал

Проблема: одинаковый вывод

Создадим класс Cat с именем и методом meow(). В методе просто выведем «Кот мяукнул!»:

Кот мяукнул! Кот мяукнул!

В консоли не видно, какой именно кот мяукнул. Оба вывели одинаковое сообщение. Как это исправить?

Решение: идентификатор this

Внутри метода есть специальный идентификатор this, который ссылается на объект, вызвавший этот метод. Через this можно обращаться к свойствам и методам текущего объекта.

Барсик мяукнул! Мурзик мяукнул!

Теперь видно, какой кот мяукнул. Магия this позволяет методу понять, с каким объектом он работает.

Как это работает

Когда мы пишем cat1.meow(), внутри метода meow() идентификатор this становится ссылкой на cat1.

При вызове cat2.meow()this указывает на cat2.

this — это как если бы методу невидимо передавался параметр «тот объект, от которого меня вызвали».

Проблема: вывод объекта на консоль

Что будет, если попробовать вывести объект напрямую?

main.idyl:10: error: cannot print object of class 'Cat' directly

Компилятор не знает, как вывести объект Cat в консоль. Нужно объяснить это ему самостоятельно.

Решение: метод info()

Добавим в класс метод info(), который возвращает строковое представление объекта:

Кот по кличке Барсик: 3 лет, цвет рыжий Кот по кличке Мурзик: 5 лет, цвет белый

Метод info() использует this, чтобы получить доступ к свойствам текущего объекта, и выводит удобочитаемую строку.

Итог

  • this — это ссылка на объект, вызвавший метод.
  • Через this можно обращаться к свойствам и методам текущего объекта.
  • this неявно передаётся в каждый нестатический метод.
  • Вывести объект на консоль напрямую нельзя — нужно создать метод, который вернёт строковое представление (например, info()).