Расширенные возможности
В этой главе рассматриваются следующие вопросы.
- Статические методы и свойства. Доступ к данным и функциям с помощью классов, а не объектов.
- Абстрактные классы и интерфейсы. Отделение проектного решения от его реализации.
- Трейты. Совместное использование реализации в иерархиях классов.
- Обработка ошибок. Общее представление об исключениях.
- Завершенные классы и методы. Ограниченное наследование.
- Методы-перехватчики. Автоматическая передача полномочий.
- Методы-деструкторы. Освобождение ресурсов после использования объекта.
- Клонирование объектов. Создание копий объектов.
- Преобразование объектов в символьные строки. Создание сводного метода.
- Функции обратного вызова. Расширение функциональных возможностей компонентов с помощью анонимных функций и классов.
…
Доступ к методам и свойствам можно получать в контексте класса, а не объекта. Такие методы и свойства являются статическими и должны быть объявлены с помощью ключевого слова static
…
Подобные методы работают, как "фабрики", поскольку берут"сырье"(например, информацию, полученную из строки таблицы базы данныили файла конфигурации) и используют его для создания объектов. Термин фабрика относится к коду, предназначенному для создания экземпляров объектов. Примеры подобных "фабрик" еще не раз будут встречаться в последующих главах.
…
:::info Да, вы абсолютно правы! Основное различие между абстрактным классом и интерфейсом заключается именно в том, что абстрактный класс может содержать реализацию методов, которые наследующие классы могут использовать по умолчанию или переопределить при необходимости. Интерфейс же, напротив, изначально предназначен для задания только набора методов (и свойств), которые класс должен реализовать, но не содержит их реализации (хотя в современных версиях некоторых языков, таких как Java или C#, в интерфейсах тоже могут быть методы с реализацией, но это скорее исключение и добавляется для удобства).
Основные отличия выглядят так:
1. Абстрактный класс:
• Может содержать как реализованные методы, так и абстрактные (без реализации).
• Можно добавлять поля и свойства, которые наследники могут унаследовать.
• Поддерживает более сложные отношения "предок-потомок", позволяя наследовать как поведение, так и состояние (переменные/свойства).
• Позволяет создавать конструкторы, которые могут инициализировать поля или вызывать методы в наследниках.
2. Интерфейс:
• Предназначен для задания строго обязательного "контракта" для класса, чтобы тот реализовал определенный набор методов.
• Не может иметь полей или свойств (за исключением констант), так как не несет в себе состояния.
• В классическом понимании (до появления "дефолтных методов") не имеет никакой реализации — все методы в интерфейсе являются абстрактными.
• Класс может реализовывать несколько интерфейсов, что помогает создавать более гибкую иерархию классов.
Таким образом, абстрактные классы используют, когда нужно задать "скелет" поведения с возможностью частичной реализации. Интерфейсы же — для определения набора обязательных методов, которые класс обязан реализовать.
:::
\