Переопределение методов в обобщенном классе

Метод обобщенного класса, как и любой другой метод, может быть переопределен. Например, рассмотрим следующую программу, в которой переопределяется метод getob():

// Переопределение обобщенного метода в обобщенном классе.
class Gen {
Т ob; // Объявление объекта типа Т
// Передать конструктору ссылку
//на объект типа Т. Gen(T о) {
ob = о;
}
// Возвращение ob. Т getob () {
System.out.print("getob () класса Gen: " );
return ob;
}
}
// Подкласс Gen, переопределяющий getob().
class Gen2 extends Gen {
Gen2(T o) {
super(o);
// Переопределение getob().
Т getob () {
System.out.print("getob () класса Gen2: ");
return ob;
}
}
// Демонстрация переопределения обобщенных методов.
class OverrideDemo {
public static void main(String args[]) {
// Создание объекта Gen для Integer.
Gen iOb = new Gen(88);
// Создание объекта Gen2 для Integer.
Gen2 i0b2 = new Gen2(99);
// Создание объекта Gen2 для String.
Gen2 strOb2 = new Gen2("Обобщенный тест");
System.out.println(iob.getob());
System.out.println(i0b2.getob());
System.out.println(str0b2.getob());
}
}

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

getob () класса Gen: 88
getob () класса Gen2 : 99
getob() класса Gen2 : Обобщенный тест

Как подтверждает вывод, переопределенная версия getob () вызывается для объекта Gen2, но для объектов типа Gen вызывается версия суперкласса.