I wish to know when we can use an interface extending another interface. I wish to know a practical example and when we use it.
When we want to use multiple inheritance in our application then one interface should extends other interface.
To make the parallel development of your application it is very necessary to write your code in such a way that you can incorporate newly discovered requirements into the existing code as painlessly as possible. So, if we implements the interface then concrete class names locks you into specific implementations, making down-the-line changes unnecessarily difficult. Therefore, we extends interface.
You extend an interface when a subinterface provides everything the superinterface provides, and does something else of importance. For example, SortedMap<K,V>
implements Map<K,V>
, because sorted map is a map that supports all operations of a map, plus some operations applicable only to sorted maps.
This is similar to inheriting among classes, but it allows for multiple implementations. For example, one could implement a SortedMap
as a sorted list of keys plus a parallel array of values, rather than a tree. This would let users swap in a faster or otherwise superior implementation without changing the rest of the code. In other words, inheritance among interfaces lets you preserve the benefits of programming to interfaces.
Have a look at interfaces like java.util.Collection
, java.util.Set
to see how this is done, and how contracts can be tightened.