Classes can extend generic classes, and provide values for type parameters or add new type parameters by in doing so. For example, all the following are legal:
class MyStringList extends ArrayList<String> { ... }
class A<X, Y, Z> { ... }
class B<M,N> extends A<N, String, Integer> { ... }
The addition of generics does, however, change the rules of method overriding slightly. Note in the first example above (MyStringList) the effective signatures of the 'get' method in ArrayList and our subclass:
ArrayList:
public...