Это та же семантика, что и наследование между классами.
В мире ООП, производный тип Наследует базовый тип, когда это более конкретная версия базового типа - независимо от того, является ли этот тип интерфейсом или классом, принцип остается неизменным.
Вот пример из .Net Framework: Интерфейс IList
наследует интерфейс ICollection , который наследует интерфейс IEnumerable .
Интерфейс IEnumerable
предоставляет метод GetEnumerator()
, необходимый для перечисления с использованием цикла foreach
.
ICollection
Добавляет новые возможности: свойство Count
и метод CopyTo
.
IList
добавляет еще больше возможностей - индексатор, Add
и Remove
методы и т. Д.
Таким образом, IList
является более конкретным типом ICollection
, который является более конкретным типом IEnumerable
.
Тот факт, что интерфейсы могут наследовать друг друга, означает, что у вас может быть полиморфная точка зрения также на интерфейсах, а не только на классах - что может значительно упростить ваш код при работе с несколькими интерфейсами, наследующими друг с другом.
Еще одним преимуществом этого является тот факт, что вы можете объявлять методы расширения в интерфейсе и использовать его в любом классе, который реализует этот интерфейс, прямо или косвенно, путем реализации интерфейса, который его наследует - как в классах.
Что касается вопроса, почему бы не удалить наследование и не реализовать отдельно два интерфейса - это имело бы смысл, если бы интерфейсы не были связаны - как, например, в классе Control
(в System .Windows.Forms) - Он реализует множество интерфейсов, таких как IDropTarget
и IComponent
, которые не связаны.