Проблема: одинаковый вывод
Создадим класс Cat с именем и методом meow(). В методе просто выведем «Кот мяукнул!»:
В консоли не видно, какой именно кот мяукнул. Оба вывели одинаковое сообщение. Как это исправить?
Решение: идентификатор this
Внутри метода есть специальный идентификатор this, который ссылается на объект, вызвавший этот метод. Через this можно обращаться к свойствам и методам текущего объекта.
Теперь видно, какой кот мяукнул. Магия this позволяет методу понять, с каким объектом он работает.
Как это работает
Когда мы пишем cat1.meow(), внутри метода meow() идентификатор this становится ссылкой на cat1.
При вызове cat2.meow() — this указывает на cat2.
this — это как если бы методу невидимо передавался параметр «тот объект, от которого меня вызвали».
Проблема: вывод объекта на консоль
Что будет, если попробовать вывести объект напрямую?
Компилятор не знает, как вывести объект Cat в консоль. Нужно объяснить это ему самостоятельно.
Решение: метод info()
Добавим в класс метод info(), который возвращает строковое представление объекта:
Метод info() использует this, чтобы получить доступ к свойствам текущего объекта, и выводит удобочитаемую строку.
Итог
this— это ссылка на объект, вызвавший метод.- Через
thisможно обращаться к свойствам и методам текущего объекта. thisнеявно передаётся в каждый нестатический метод.- Вывести объект на консоль напрямую нельзя — нужно создать метод, который вернёт строковое представление (например,
info()).