-1

Я не очень понимаю концепцию интерфейсов. Как я понял, чаще всего это некая сущность, объединяющая несколько классов, имеющие общие методы, для применения полиморфизма. Как применять их на практике и в каких ситуациях лучше будет воспользоваться абстрактным классом?

Vitaly
  • 1
  • https://ru.stackoverflow.com/search?q=%5Bjava%5D+%D0%B7%D0%B0%D1%87%D0%B5%D0%BC+%D0%BD%D1%83%D0%B6%D0%BD%D1%8B+%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D1%8B – tym32167 Jun 24 '22 at 22:01

1 Answers1

2

если в двух словах, то абстрактный класс - это такой недокласс, хранящий состояние(поля) и поведение(методы), и все дочерние классы наследуют поля и поведения родительского класса.
интерфейс - это контракт(поведение).

например - есть у нас абстрактный класс студент, у него есть поля, имя, фамилия и тд. поведение(методы) спать, есть, учиться и тд.

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

наследоваться мы можем только от одного класса, а имплементировать интерфейсы сколько угодно.

есть нюанс, старшекурсник курит, бухает, девчат в кабаки водит, а профессору такое поведение непозволительно, и мы выносим данное поведение в интерфейсы, и реализуем данное поведение у старшекурсника, и при необходимости можем имплементировать интерфейс "бухать" професcору.
в абстрактном классе мы собираем все общие черты, а интерфейс это отдельное поведение.
очень хорошая книга на это тему, про ооп там первых страниц 150
Мэтт Вайсфельд | Объектно-ориентированное мышление
введите сюда описание изображения

  • 1
    Когда то отвечел на подобный вопрос https://ru.stackoverflow.com/a/1071299/179763 – tym32167 Jun 24 '22 at 23:01