Обобщенный подкласс

Абсолютно приемлемо, когда суперклассом для обобщенного класса выступает класс необобщенный. Например, рассмотрим программу:

// Необобщенный класс может быть суперклассом
// для обобщенного подкласса.
// Необобщенный класс.
class NonGen {
int num; NonGen(int i) {
num = i;
}
int getnumO {
return num;
}
}
// Обобщенный подкласс.
class Gen extends NonGen {
T ob; // Объявление объекта типа T
// Передать конструктору объект
// типа Т.
Gen (Т о, int i) {
super (i) ;
ob = о;
}
// Возвращает ob.
T getob () { return ob;
}
}
// Создать объект Gen.
class HierDemo2 {
public static void main(String args[]) {
// Создать объект Gen для String.
Gen w = new Gen("Добро пожаловать", 47);
System.out.print(w.getob() + " ");
System.out.println(w.getnum());
}
}

Результат работы этой программы показан ниже:

Добро пожаловать
4
7

Обратите внимание на то, как в этой программе Gen наследуется от NonGen:

class Gen extends NonGen {

Поскольку NonGen — необобщенный класс, никакие аргументы типа не указываются. То есть даже если Gen объявляет тип-параметр Т, он не требуется (и не может быть использован) NonGen. То есть Gen наследуется от NonGen обычным способом. Никаких специальных условий не требуется.