Применение принципа инверсии зависимостей

Согласно принципу инверсии зависимостей, класс не должен напрямую взаимодействовать с другим, это должно выполняться с использованием абстракции. При этом объекты состоят из абстрактного класса или интерфейса и относятся к классу, реализующему его. Теперь мой вопрос: если это так, как мы можем использовать дополнительные методы, определенные в дочернем классе? А если нет, то какой смысл в возможности определять дополнительные методы в дочернем классе?

Мой вопрос в том, что если мы попытаемся следовать вышеуказанному принципу, мы никогда не сможем использовать эти дополнительные методы. Или что-то мне не хватает?

Пожалуйста, ответьте, если этот вопрос непонятен, я добавлю пример.


person Harsh Akshit    schedule 23.04.2021    source источник
comment
Это не совсем точное описание того, что такое инверсия зависимостей - см. этот ответ.   -  person kaya3    schedule 24.04.2021
comment
Дочерний класс может реализовывать дополнительные интерфейсы. Летучая мышь - млекопитающее, но у нее есть крылья, и она может летать.   -  person Ian Mercer    schedule 24.04.2021
comment
Даже если это не точное определение DIP, это достигается с помощью абстракции, если я прав. И я понимаю, что класс может реализовывать дополнительные интерфейсы, но это также не поможет, если мы сделаем объект одного из этих интерфейсов, а не класса. Например, если C реализует A и B, согласно DIP, мы должны создавать объекты типа A или B. Итак, мы можем сделать C абстрактным классом и создать другой класс D, который реализует C, а затем создать объект типа C. Но даже тогда у меня остается вопрос, как мы можем использовать дополнительные методы D, которых нет в A, B или C.   -  person Harsh Akshit    schedule 24.04.2021
comment
Например, предположим, что A (интерфейс) имеет 5 методов, которые мы переопределяем в классе B, и мы также добавляем еще 2 метода. Поскольку создание объекта класса B в модуле более высокого бизнес-уровня является плохой практикой, вместо этого мы должны создать объект класса концепции, то есть A, тогда как мы можем когда-либо использовать эти два дополнительных метода B. Я просто хочу знать, является ли он возможно или нет.   -  person Harsh Akshit    schedule 24.04.2021