Не настраиваемый класс вполне может быть суперклассом для настраиваемого подкласса. Рассмотрим программу из листинга 3.14.
Листинг 3.14. Не настраиваемый класс в качестве суперкласса для настраиваемого подкласса
class NonGen {
int num;
NonGen(int i) {
num = i;
}
int getnum() {
return num;
}
}
// A generic subclass.
class Gen extends NonGen {
T ob; // declare an Object of type T
// Pass the constructor a reference to
// an Object of type T.
Gen(T o, int i) {
super(i);
ob = o;
}
// Return ob.
T getob() {
return ob;
}
}
// Create a Gen Object.
class HierDemo2 {
public static void main(String args[]) {
// Create a Gen Object for String.
Gen w = new Gen("Hello", 47);
System.out.print(w.getob() + " ");
System.out.println(w.getnum());
}
}
Вывод результатов работы программы из листинга 3.14 приведен в следующей строке:
Hello 47
Обратите внимание на то, как класс Gen наследует класс NonGen в объявлении, приведенном в следующей строке:
class Gen extends NonGen {
Поскольку класс NonGen не настраиваемый, в нем не задан аргумент типа. Следовательно, несмотря на то, что в классе Gen объявлен параметр T, он не нужен классу NonGen (и не может им использоваться). Таким образом, класс Gen унаследовал класс NonGen обычным способом без каких-либо специальных условий.
|