Java中的泛型类层次结构
泛型是指java5中引入的参数化类型。这些有助于创建类、接口、方法等。在称为“泛型类”或“泛型方法”的参数化类型上工作的类或方法。泛型是定义和使用泛型类型和方法的语言属性的组合。集合在泛型之前使用,泛型包含任何类型的对象,即非泛型。使用泛型,可以创建自动处理所有类型数据(整数、字符串、浮点数等)的单个类、接口或方法。它扩展了安全、轻松地重用代码的能力。泛型还提供类型安全(确保在执行该操作之前正在对正确类型的数据执行操作)。
继承允许分层分类。超类是一个被继承的类。子类是一个确实继承的类。它继承了超类定义的所有成员,并添加了自己的独特元素。这些使用扩展作为关键字来这样做。
有时泛型类的行为类似于超类或子类。在泛型层次结构中,所有子类都向上移动层次结构中泛型超类所必需的任何参数类型。这与在层次结构中向上移动构造函数参数相同。
示例 1:通用超类
Java
// Java Program to illustrate generic class hierarchies
// Importing all input output classes
import java.io.*;
// Helper class 1
// Class 1 - Parent class
class Generic1 {
// Member variable of parent class
T obj;
// Constructor of parent class
Generic1(T o1) { obj = o1; }
// Member function of parent class
// that returns an object
T getobj1() { return obj; }
}
// Helper class 2
// Class 2 - Child class
class Generic2 extends Generic1 {
// Member variable of child class
V obj2;
Generic2(T o1, V o2)
{
// Calling super class using super keyword
super(o1);
obj2 = o2;
}
// Member function of child class
// that returns an object
V getobj2() { return obj2; }
}
// Class 3 - Main class
class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating Generic2 (sub class) object
// Custom inputs as parameters
Generic2 x
= new Generic2("value : ",
100);
// Calling method and printing
System.out.println(x.getobj1());
System.out.println(x.getobj2());
}
}
Java
import java.io.*;
// non-generic super-class
class NonGen {
int n;
NonGen(int i) { n = i; }
int getval() { return n; }
}
// generic class sub-class
class Gen extends NonGen {
T obj;
Gen(T o1, int i)
{
super(i);
obj = o1;
}
T getobj() { return obj; }
}
class GFG {
public static void main(String[] args)
{
Gen w = new Gen("Hello", 2021);
System.out.println(w.getobj() + " " + w.getval());
}
}
输出
value :
100
Note: A subclass can freely add its own type parameters, if necessary.
示例 2:泛型子类的非泛型子类
Java
import java.io.*;
// non-generic super-class
class NonGen {
int n;
NonGen(int i) { n = i; }
int getval() { return n; }
}
// generic class sub-class
class Gen extends NonGen {
T obj;
Gen(T o1, int i)
{
super(i);
obj = o1;
}
T getobj() { return obj; }
}
class GFG {
public static void main(String[] args)
{
Gen w = new Gen("Hello", 2021);
System.out.println(w.getobj() + " " + w.getval());
}
}
输出
Hello 2021