Why is "extends T" allowed but not "implements T"?

generics, java, syntax

Solution

There is no semantic difference in the generic constraint language between whether a class 'implements' or 'extends'. The constraint possibilities are 'extends' and 'super' - that is, is this class to operate with assignable to that other one (extends), or is this class assignable from that one (super).

Problem

Is there a special reason in Java for using always "`extends`" rather than "`implements`" for defining bounds of type parameters? For example: ``` public interface C {} public class A<B implements C>{} ``` is prohibited, but ``` public class A<B extends C>{} ``` is correct. What is the reason for that?

Original source

Related problems