Добрый день, начал изучать ООП используя язык PHP. Почитал про интерфейсы и абстрактные методы. Хотел уточнить пару моментов. Правильно ли я понимаю, что описывая интерфейс мы указываем, какие публичные методы обязательно должны присутствовать в классе, которые используют этот интерфейс? А абстрактные методы описываются для того, чтобы знать, какие методы обязательно должны присутствовать в классе-потомке? Правильно ли я все понял? И зачем интерфейсы и абстрактные методы могут использоваться еще?
Вы всё верно понимаете. Но смысл этих терминов немного глубже. Интерфейс и абстрактные классы нужны для того , чтобы определить общность дочерних классов. И те и те обязывают реализовать методы в дочернем классе. Разница в том ,что абстрактный класс может содержать поля(глобальные переменные) и обычные методы, а интерфейс содержит только названия методов.
Иногда требуется чтобы объект A являлся и объектом Б и объектом С одновременно. В этом случае на помощь приходят интерфейсы , так как их можно реализовать(implements) много , а унаследовать(extends) Абстрактный или обычный класс можно один раз.
Используется это для достижения наибольшей гибкости программы. Мы можем работать с разными типами данных как с одним. Используя общее поведение.
Но это не все особенности и для того чтобы их понять нужно изучить полиморфизм.