Интерфейс и абстрактные классы относятся к концепции ООП языка программирования JAVA. Но когда мы должны использовать какой из них, на самом деле зависит от ситуации и необходимости.

Когда использовать интерфейсы:

  • Достижение 100% абстракции. Используя абстрактные классы, мы можем достичь частичной абстракции, если у нее есть абстрактные и неабстрактные методы, тогда как с помощью интерфейсов мы достигаем полной абстракции, поскольку интерфейсы всегда имеют абстрактные методы.
  • В интерфейсе объявленные переменные по умолчанию являются статическими и окончательными. Так используется, когда мы не хотим, чтобы какой-либо реализующий класс менял значение переменной.
  • Мы можем добиться множественного наследования в JAVA, используя интерфейс. Предположим, что есть 2 интерфейса — Человек и Программист. Итак, если мы хотим создать класс Employee, который является и человеком, и программистом. Мы можем сделать это, реализуя Person и Programmer как — класс Employee реализует Person, Programmer{}
  • Интерфейсы более гибкие. Рассмотрим пример, когда вы не хотите заставлять своих клиентов реализовывать все методы одного интерфейса. В этом случае вы можете разделить свой интерфейс на несколько интерфейсов (принцип разделения интерфейсов).

Когда использовать абстрактные классы:

  • Когда мы хотим поделиться некоторыми общими функциями со всеми классами, создайте абстрактный класс. Это также поможет обновить общую функциональность только в 1 базовом классе, если требуется какое-либо обновление.
  • Когда вы хотите объявить не статические и не окончательные поля. Это позволяет вам создавать методы для изменения этих полей.
  • Когда вы хотите объявить элементы данных с различными модификаторами доступа, такими как частные, защищенные и т. д. Члены данных интерфейсов всегда являются общедоступными по умолчанию.

Надеюсь, вам понравится этот блог. Не стесняйтесь предлагать / спрашивать в разделе комментариев.

Продолжай учиться :)