Не понятно, что имеете ввиду под "напрямую работать с объектом"...
Класс позволяет собрать вместе (инкапсулировать) свойства (данные) и методы (код). В определении класса вы описываете какие типы данных (иногда и значения по умолчанию) и какой конкретно код. Далее, создавая (инстанцируя) объекты этого класса вы позволяете им иметь разные данные - этим они отличаются. Но поведение у них общее. Если конечно в методах вы не ветвите поведение в зависимости от свойств объекта. Но это было бы плохим решением. Лучше - создавать новые классы и наследовать их от исходного. А объекты инстанцировать уже от них.
Работать напрямую с классом можно - если его методы и свойства статические. В таком случае класс обычно используется как библиотека функций и констант. Причем класс может совмещать в себе и статические и обычные поля.
По конкретному коду я могу ошибаться, но вроде бы так:
OnClickListener - класс. Вы создаете объект этого класса. Метод onClick привязывается где-то еще к событию щелчка по кнопке. В вашем коде вы просто переопределяете его поведение. В частности вызываете метод объекта tvOut.
P.S. Возможно, что там, где вы читали, методы привязанные к событиям (пользовательского интерфейса и прочим) называют событиями.