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

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