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 . All the functions of the implemented interface will automatically be accessible as if they had been declared public. True coding gain No need to delegate by hand all the operations. One might also use interfaces to define subsets of classes that are delegated in their class.