Подтвердить что ты не робот

Точное использование абстрактного класса

Каково точное использование абстрактного класса? Невозможно ли сделать одни и те же вещи в обычном классе, так как это абстрактный класс?

4b9b3361

Ответ 1

Используйте абстрактный класс, чтобы обеспечить определенную конкретную реализацию, но не допускать создание экземпляра. Вы всегда можете создать экземпляр обычного класса, который не имеет смысла, если он не может стоять в одиночестве. В то же время интерфейс может оказаться недостаточным, если существует конкретная реализация, которая идентична во всех реализующих классах. Абстрактного класса достаточно.

  • Интерфейс: только контракт, без реализации, без экземпляра
  • Абстрактный класс: контракт, некоторая реализация, отсутствие экземпляра
  • Класс: контракт, реализация, экземпляр

Ответ 2

Абстрактный класс используется, когда у вас есть базовая функциональность, которую вы хотите наследовать подклассам, но не имеет смысла создавать экземпляр базового класса. Например, если у вас есть что-то вроде базового класса Shape, у вас может быть встроенная реализация, которая может использоваться подклассами, а также методы интерфейса, которые вы хотите реализовать подклассам. Однако, вероятно, не было бы смысла создавать объект Shape. Абстрактный класс дает вам эту функциональность. Другим замечательным примером использования абстрактных классов является абстрактный шаблон factory.

Ответ 3

Регулярные классы требуют, чтобы вы предоставляли реализации для всех методов.
Интерфейсы требуют, чтобы вы не предоставляли никаких реализаций для всех методов.

Абстрактные классы - это единственный тип класса, который позволяет вам иметь методы, которые содержат реализацию, и методы, которые не обеспечивают реализацию, но требуют, чтобы класс наследования предоставлял один.

Тот факт, что вам разрешено добавлять методы без реализации, является причиной того, что вы не можете создать экземпляр абстрактного класса: вы можете только создать экземпляр того, что имеет реализации для всех его методов.

Ответ 4

В отличие от обычных классов, классы abstract могут содержать методы abstract. Они действуют как элементы интерфейса.

Между тем, они могут делать почти все, что могут делать обычные классы: они могут реализовывать методы, содержать поля и вложенные типы, выводить из другого класса и т.д.