Consider the classic example of displaying a grapher. For this, I have a class Graphic. And this goes for all new functions, and deprecated ones. This is beginning to rhyme with nightmare, but it's part of the compromise Java makes with simplicity. Your class will never know about any concrete implementation of the interface it delegates to.
Some people are concerned about the visibility of the delegation.
They'd like the fact that the implementation of an interface is actually delegated to be invisible from the declaration. This syntax can cause ambiguities. Delegated functions come second in the resolution of overridden methods. To prevent this, I suggest that only those interfaces mentioned in the declarative part of the class should be considered when trying to perform a call. Instead of an ArrayStoreException , you would have some DelegationAmbiguityException .