На этом уроке мы узнаем как скрыть детали реализации от пользователя, и как защитить наши переменные от внешнего воздействия с помощью геттеров и сеттеров. Разберем примеры наследования атрибутов и методов от одного класса к другому, создадим подклассы на основе родительских классов. С помощью наследования можно расширить функционал уже имеющихся классов за счет добавления нового функционала или изменения старого. Мы научимся использовать полиморфизм в связке с наследованием. Поговорим о переопределении методов как возможности реализовать метод так, чтобы он имел идентичную сигнатуру с методом класса-предка, но предоставлял иное поведение, не вызывая коллизий при его использовании. Рассмотрим, что такое интерфейсы в Java, и как они применяются для реализации принципа абстракции. Интерфейсы и внутренние классы предоставляют более изощренные пути для организации и контроля над объектами в вашей системе.