java自定义泛型类详解

1.自定义泛型类,泛型属性,泛型方法
public class Son <E> {
          
   
//<>里面是一个参数类型,目前不确定这个参数类型,<>相当于一个占位符,里面只传引用数据类型,而不是基本数据类型
        int id;
        String name;
        E sex;
        E ema;
public  void a(E n){
          
   
    System.out.println("定义泛型方法");
}
public void b(E [] m){
          
   
    System.out.println("定义泛型数组");
}
}
1.1.实例化不指定泛型类型测试代码
class Test{
          
   

    public static void main(String[] args) {
          
   
        //实例化son 时不指定泛型类型进行实例化,
        //不指定泛型类型时,为Object类型
        Son s=new Son();
        s.a("10");
        s.a(20);
        s.a(30.0);//调用自定义a方法
        s.b(new String []{
          
   "40","50"});//调用自定义泛型b方法
        s.b(new Integer[]{
          
   1,2,3});//
    }
1.2实例化指定泛型类型测试代码
class Test1{
          
   

    public static void main(String[] args) {
          
   
//指定泛型类型为String时,自定义泛型方法传入的参数只能为String类型,不能为Object类型
        Son <String> s=new Son<String>();
        s.a("123");
        s.b(new String[]{
          
   "1","2"});
    }
}
实例化指定泛型类型和实例化不指定泛型类型的比较:

    1指定泛型类型为了限制泛型
    
    2不指定泛型类型时为Object类型无法限制泛型类型

2泛型继承关系

2.1父类指定泛型类型:父类指定泛型类型时,子类不需要指定泛型类型,直接使用即可
package hyh;
//父类
public class Son <E> {
          
   
        int id;
        String name;
        E sex;
        E ema;
public  void a(E n){
          
   
    System.out.println("定义泛型方法");
}
public void b(E [] m){
          
   
    System.out.println("定义泛型数组");
}
}
  //子类继承父类
class SonTest extends  Son<Integer>{
          
   
//父类指定泛型---Integer


}
  //测试类
class Test2{
          
   
  
    public static void main(String[] args) {
          
   
        SonTest son=new SonTest();
        son.a(10);
        son.b(new Integer[]{
          
   1,2,3});

    }

}
2.2父类不指定指定泛型类型:父类没有指定泛型类型时,子类实例化的时候可指定泛型类型
package hyh;
//父类
public class Son <E> {
          
   
        int id;
        String name;
        E sex;
        E ema;
public  void a(E n){
          
   
    System.out.println("定义泛型方法");
}
public void b(E [] m){
          
   
    System.out.println("定义泛型数组");
}
}
//子类继承父类
class SonTest<E> extends  Son<E>{
          
   




}
//测试类
class  Test{
          
   

    public static void main(String[] args) {
          
   
        SonTest<String > str=new SonTest<String>();
        str.a("1");
        str.ema="2";
        str.b(new String []{
          
   "2,3,4"});
    }
}
经验分享 程序员 微信小程序 职场和发展