Какое из следующих утверждений об абстрактных классах является верным?
Подробное объяснение
Верное утверждение — вариант 3: абстрактный класс может хранить состояние (поля) и описывать поведение (как абстрактные, так и обычные методы). Это отличает его от интерфейсов, которые обычно только задают контракт. Вариант 1 неверен, так как абстрактные классы не просто описывают часть функциональности, а предоставляют общую базу. Вариант 2 неверен, поскольку множественное наследование классов запрещено в большинстве языков (например, Java, C#).
Часто задаваемые вопросы (FAQ)
1
Чем абстрактный класс отличается от интерфейса?
Абстрактный класс может содержать поля и реализованные методы, а интерфейс — только сигнатуры методов (до Java 8) и константы. Класс может реализовать несколько интерфейсов, но наследоваться только от одного абстрактного класса.
2
Можно ли создать экземпляр абстрактного класса?
Нет, абстрактный класс нельзя инстанцировать напрямую. Он предназначен для наследования, и его экземпляры создаются через конкретные подклассы.
3
Зачем нужны абстрактные классы?
Абстрактные классы позволяют определить общую структуру и частичную реализацию для группы родственных классов, избегая дублирования кода. Они задают шаблон, который наследники дополняют конкретной реализацией.
Типичные ошибки
1
Думать, что абстрактный класс не может иметь полей.
Абстрактный класс может содержать поля (состояние), что является его ключевой особенностью по сравнению с интерфейсом.
2
Считать, что можно наследовать несколько абстрактных классов.
В большинстве объектно-ориентированных языков (Java, C#, C++) множественное наследование классов запрещено, можно наследоваться только от одного класса.
3
Путать абстрактные классы с интерфейсами.
Интерфейсы задают только контракт, а абстрактные классы могут предоставлять общую реализацию и состояние, что делает их более гибкими для построения иерархий.