In object-oriented programming, when you extend a class you establish an is-a relationship between a new subtype and its parent(s), i.e. B is an A (aka code inheritance). When you compose a class with the help of existing types, you establish a has-a relationship between the newly composed type and the types it comprises, i.e. B has an A (aka object composition).
In many languages (e.g. Java), you have yet another way of defining types, namely by means of interface inheritance. How does one express this notion in natural everyday language?
For example, when a class B implements interface A in Java, do you also say that B is an A? Or do you express this concept differently? E.g. B implements Serizalizable, therfore B is serializable (or in other words: B has the attribute of being serializable).
In asking this question, I am not so much interested in the theoretic differences between these OO concepts (for which topic there are already sufficiently many questions) but rather the differences between them when expressing them in natural language (for which topic there don't seem to be any questions available yet).