In most object-oriented programming languages, interfaces and classes both pass their relations through inheritance, and inheritance is an is-a relationship, regardless of whether it is an interface, class, abstract class, etc.
In fact, classes themselves are kind of interfaces, they just provide an implementation as well. There is not much difference between an abstract class without an implementation and an interface, although the implementation inside may have some differences. (the biggest of that in Java and .NET you cannot inherit several abstract classes)
So, from a conceptual point of view, is-a is inheritance. has-a is containment / composition / aggregation / regardless
The term "implements" is rather a subclass of "inheritance" or "subclasses". You cannot subclass an interface, but you can understand it. This is a more subtle detail, although it makes some sense.
Not all languages have interfaces. C ++, for example, no. However, you can fake them with abstract classes without implementations, as I mentioned earlier, but since C ++ allows multiple inheritance, the problem is not such a big problem (as long as they are pure abstract classes without implementations, if you start mixing the code in them, then it becomes more hairy)
source share