- Зависит от абстракций. Не зависьте от конкретных классов.
Я прошу случай, когда, скажем, есть интерфейс Bird (у него нет Fly метод, поскольку некоторые птицы не умеют летать), который представляет всех нелетающих птиц. Поэтому я создаю класс NonFlyingBird, который реализует Bird.
Теперь я хочу создать класс для птиц, которые умеют летать. Поскольку NonFlyingBirds и FlyingBirds имеют одинаковые атрибуты, я расширяю FlyingBirds из NonFlyingBirds и реализую Flyable, чтобы придать ему поведение полета.
Разве это не нарушает принцип инверсии зависимостей, поскольку FlyingBirds наследуется от конкретного класса NonFlyingBirds?
Код: Выделить всё
interface Bird { // Represents non Flying birds
void getColor();
void getHeight();
...
}
class NonFlyingBird implements Bird {
void getColor();
void getHeight();
...
}
class FlyingBird extends NonFlyingBird implements Flyable { // Does it break Dependency Inversion principle by extending concrete NonFlyingBird class?
Flyable fly;
...
}
Подробнее здесь: https://stackoverflow.com/questions/581 ... -principle