Использование обобщенного суперкласса
Ниже приведен пример иерархии, которая использует обобщенный суперкласс:
// Простая иерархия обобщенных классов.
class Gen
Т ob;
Gen(T о) {
ob = о;
}
// Возвращает ob.
Т getob () {
return ob;
}
}
// Подкласс Gen.
class Gen2
Gen2(T o) {
super(o);
}
В этой иерархии Gen2 расширяет обобщенный класс Gen. Обратите внимание на то, как в следующей строке объявлен Gen2:
class Gen2
Параметр типа T специфицирован в Gen2 и также передается Gen в операторе extends. Это значит, что тип, переданный Gen2, будет также передан Gen. Например, следующее объявление
Gen2
передает Integer как параметр типа классу Gen. То есть ob внутри части Gen класса Gen2 будет иметь тип Integer. Отметим также, что Gen2 никак не использует параметр типа Т, кроме того, что передает его суперклассу Gen. Даже если подкласс обобщенного суперкласса никак не нуждается в том, чтобы быть обобщенным, несмотря на это он все же должен специфицировать параметры типа, необходимые его обобщенному суперклассу.
Конечно, при необходимости подкласс может добавлять свои собственные параметры типа. Например, ниже показан вариант предыдущей иерархии, в котором Gen2 добавляет собственный параметр типа:
// Подкласс может добавлять свои собственные параметры типа.
class Gen
Т ob; // Объявление объекта типа Т
// Передача конструктору
// ссылки на объект типа Т.
Gen(T о) {
ob = о;
}
// Возвращает ob.
Т getob () {
return ob;
}
}
// Подкласс Gen, который определяет
// второй параметр типа по имени V.
class Gen2
V ob2;
Gen2 (T о, V o2) {
super (o) ;
ob2 = o2;
}
V getob2 () {
return ob2;
}
}
// Создание объекта типа Gen2.
class HierDemo {
public static void main(String args[]) {
// Создание объектов Gen2 для String и Integer.
Gen2
System.out.print (x.getobO ) ;
System.out.println(x.getob2());
}
}
Обратите внимание на объявление Gen2, показанное в следующей строке: class Gen2 Здесь T — тип, переданный Gen, а V — тип, специфичный для Gen2. V используется для объявления объекта, названного оЬ2, а также в качестве типа возврата метода getob2 (). В main () создается объект Gen2 с типом String для параметра Т и типом Integer для параметра V.
Программа выдает следующий вполне ожидаемый результат: Значение равно: 99