A<String>はクラスなのか
Java等の言語においてclass Aはnon-genericなクラス、class A<T>はgenericなクラスであるというのはわりと共通していると思います。
それでは、A<T>のTにStringを指定したA<String>は「クラス」なのでしょうか?
8.1.2を読むとA<String>は型(a parameterized type)ではあるが、クラスではなさそうです。実際、Vector<String> xに対するx.getClass()とVector<Integer> yに対するy.getClass()は同じものを返すという例が書いてあります。 そうするとclass B extends A<String>としたときのBのsuperclassは何なんだよという話になりますが、8.1.4をよく読むと「the direct superclass of the type C ... is the type given in the extends clause ...」とあり、Javaにおけるsuperclassはクラスではなくtypeであるということが分かります。 うーん読めば読むほどわからなくなる…Javaにおけるクラスって何?classとclass typeの関係は…?
Language ReferenceのClass Declarationの項に「Generic classes can inherit from other generic and nongeneric classes, but a nongeneric class can inherit only from other nongeneric classes. 」という記述がある When you write the name of a generic superclass class after the colon, you must include the full name of that generic class, including its generic parameter clause.」