Как обычно надо отвечать на интервью когда спашивают про полиморфизм, я могу примером сказать что это когда у нас есть класс и подкласс и мы переопределили какой-то метод. Но как это правелинее сформулировать?
Полиморфизм очень широкое понятие и есть не только в ООП, но и, скажем, в биологии. Так что разговор можно вести с разных позиций. Если бы я был интервьювером, меня бы интересовало понимаешь ли ты для чего он может использоваться, а не какие-то строгие формулировки. А польза от него такая: в одном и том же коде можно использовать экземпляры разных классов, если они наследуют от одного и того же базового класса и за счет этого можно легко расширять функционал.
А по мне реализация интерфейса похожа на купленную лицензию. Кто-то за тебя написал название метода, а ты вынужден его упоминать при использовании. Хуже - франшиза. Обязательно реализовать все объявленные методы.
не во всех ЯП есть такая конструкция как интерфейс. но да, можно говорить что у двух классов один интерфейс если они наследуют от одного и того же суперкласса. это уже частности. ООП может быть выражен даже в языках не имеющих слов class или interface ))
Интерфейс, по сути - абстрактный класс, в котором нет полей и все методы абстрактные --- Добавлено --- Ну ты же не просто так используешь интерфейс. Значит ты хочешь передавать экземпляры своего класса в какой-то код, ожидающий интерфейс. И если бы ты не реализовал этот интерфейс, то ты бы не смог это сделать. А чтоб не нужно было реализовывать слишком много методов, есть буква I в SOLID. Interface segrigation principle
Получается, что в некоторых местах кода надо еще и документы показывать на право применения. Забавно и полезно. Если честно интерфейс для меня похож на талон на покупку чего-то реального в магазине. Сам ничего не производит , но право дает. Ну или на список покупок( посмотрю, ничего не забыл?).
интерфейс еще назвают "контракт". класс получает контракт на выполнение каких-то действий. типа мы нанимаем подрядчика на выполнение определённых работ по спецификации. могут быть разные исполнители, но мы знаем что они должны соответствовать заданной спецификации, поэтому любой из них может быть применён в нашем коде, требующем проведения этих работ. интерфейсы это развитие идеи множественного наследования. в конце концов, важно не от какого родительского класса происходит данный класс, а то что он предназначен для определенных действий. --- Добавлено --- согласен с этим на интервью можно об этом сказать. как и о том, что разные ЯП обладают разным набором возможностей, поэтому когда читаешь полиморфизм как его сформулировал Страуструп: один интерфейс — множество реализаций, надо понимать что здесь интерфейс это не обязательно буквально ключевое слово interface.
Ну вот смотри, по дефолту во фреймворке ларавел аутентификация реализуется через механизмы, которые умеют работать с SQL-базами данных. А теперь тебе дают задачу, в который говорят: мы хотим, чтоб всё лежало в ArangoDB (менее популярный аналог монги). Что делать? Полностью писать по новой всё, что в ларавеле написано относительно аутентификации? Не нужно, потому что в ларе есть интерфейс, отвечающий за аутентификацию, и ты можешь запросто встроить реализацию аутентификации на апи от аранги. А если завтра появится ещё какая-нибудь СуперПуперНоСКЛБД, то опять - нет проблем, реализовал под неё интерфейс - и лара с ней работает, как с родной.
Я б такие базовые моменты для собеседования подучил по специальной литературе, типа "Гради Буч Объектно ориентированный анализ". Потому что интервьюеры часто хотят услышать именно свою версию, то как они понимают. Вы начнете своими словами как вы понимаете, и не совпадет. Вот у Банды Четырех вроде норм: