Чому інтерфейси кращі за абстрактні класи?

2024 Від admin

Загалом, вам слід вибирати інтерфейси, а не абстрактні класи. Використання інтерфейсу відокремлює ваш дизайн від будь-яких деталей реалізації. Навіть якщо ви оголошуєте суто абстрактний клас без будь-яких реалізацій методів, ви повинні успадкувати його, щоб визначити класи, які поділяють поведінку, визначену його методами.

Перевага інтерфейсу полягає в тому, що багато класів використовуються однаково та виконують переважно однаковий набір функцій, хоча кожен може по-різному отримувати доступ до нього всередині класу.. Існує кілька різних підходів до досягнення мети визначення інтерфейсу та проектування класів для його задоволення.

Інтерфейс краще, ніж абстрактний клас коли ви хочете, щоб кілька класів реалізували цей інтерфейс і коли вам не потрібно успадковувати поведінку за замовчуванням. Щоб надавати веб-сервіси або виконувати тести JMock, вам не потрібна фактична реалізація, вам потрібно лише визначення інтерфейсу.

Я часто вибираю інтерфейс, коли мені потрібно установити контракт без конкретної реалізації, полегшити структуру, подібну до множинного успадкування, або розмістити різні реалізації. Абстрактний клас стає моїм вибором, коли я хочу реалізувати поведінку за замовчуванням або розділити реалізацію серед пов’язаних класів.

  • #1 Модульність і гнучкість. Інтерфейси дозволяють розбити ваш код на менші, більш модульні частини. …
  • #2 Поліморфізм. Інтерфейси забезпечують поліморфізм у Java, дозволяючи розглядати об’єкти різних класів так, ніби вони мають однакову поведінку. …
  • #3 Абстракція. …
  • #4 Множинне успадкування.

Інтерфейси повільні порівняно з абстрактними класами, оскільки у вирішенні викликів функцій, зроблених до екземпляра інтерфейсу, JVM вимагає пошуку у віртуальних таблицях, щоб знати точний метод класу реалізації. Цей пошук потребує часу, який не потрібен для вирішення виконання методів абстрактного класу.