自定义泛型结构
- 先定义一个普通类,后面加上<占位符>,这个占位符说是占位其实默认是Object类型
- 然后在泛型类中自定义方法,并且加上:占位符,变量名
- 这时候要是给它通过实例化传入一个参数类型的时候,它就会统一为那个参数类型的集合,就只能存储那一种类型的数据。
- 但是要是父类是泛型类没有指定参数类型,则子类在继承父类时,通过子类指定父类的参数类型,从而实现这个父类中的所有属性方法都为刚才指定的类型集合。
- 如果父类没有指定泛型类型,而且子类在继承过程中也没有指定泛型类型,这时候子类就会变成一个泛型类;并且只能在实例化子类的时候进行指定参数类型。
package zhai.Fx;
// 自定义一个普通类
// 类后面跟上<>参数类型是A,但是这个A又是什么类型呢?这个A现在是不确定的类型只是个占位
// 但是这个类现在就确定一定是一个引用类型
// 父类
public class FxDemo3<E> {
// 此时这个类就是一个泛型类
int age;
String name;
E sex; // 这时候的 A 其实是个占位符,默认为 Object 类型
public void a(E n){ // 这个A就默认为Object类型
}
public void b(E[] m){
}
}
// 子类1
class SubFxDemo3 extends FxDemo3<Integer>{ // 这时候给父类指定参数类型为Integer
}
// 子类2
class SubFxDemo4<E> extends FxDemo3<E>{ // 此时这个子类和父类中都没有参数类型的话,该子类也就会称为一个泛型类
// 如果子类没有参数类型就会称为泛型类
// 只能到实例化时候定义参数类型
}
// 测试子类1
class Demo{
public static void main(String[] args) {
SubFxDemo3 subFxDemo3 = new SubFxDemo3();
subFxDemo3.a(111); // 此时该集合中只能存储Integer类型的数据
subFxDemo3.b(new Integer[]{1,2,3,4});
}
}
// 测试子类2
class Demo2{
public static void main(String[] args) {
SubFxDemo4<String> s = new SubFxDemo4<>(); // 实例化子类并且定义参数类型为String
s.a("abc"); // 所以该类中的所有方法属性均为 String 类型
}
}
// 测试父类
class Test{
public static void main(String[] args) {
// 使用类不指定泛型
FxDemo3 fx1 = new FxDemo3();
fx1.a("zhangsan");
fx1.a(12);
fx1.a(1314.00);
fx1.b(new Integer[]{1,2,3});
// 指定泛型创建泛型类 这时候一旦指定参数为String时,泛型类中的所有方法以及属性都统一为String
FxDemo3<String> objectFxDemo3 = new FxDemo3<>(); // 也就意味着此时这个集合只能存放String类型的数据
}
}
注意:可以看出只要一个泛型类中有多个子类的同时,可以根据子类来第一不同的参数类型,进行实例化使用父类中的所有方法以及属性。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)