Противоречит ли наследование принципу инверсии зависимостейJAVA

Программисты JAVA общаются здесь
Anonymous
Противоречит ли наследование принципу инверсии зависимостей

Сообщение Anonymous »

Принцип инверсии зависимостей гласит (Head First Java):
  • Зависит от абстракций. Не зависьте от конкретных классов.
Что это значит в отношении наследования?< /strong> Поскольку подкласс зависит от конкретного класса.

Я прошу случай, когда, скажем, есть интерфейс 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;
...
}
Примечание. Единственная причина, по которой я расширяю, заключается в том, что FlyingBird имеет те же атрибуты и методы, что и NonFlyingBird + поведение полета. Поэтому имеет смысл повторно использовать код путем наследования.

Подробнее здесь: https://stackoverflow.com/questions/581 ... -principle

Вернуться в «JAVA»