泛型类,泛型接口

复制代码
package com.msb.test01;

/**
 * @author : liu
 * 日期:09:01:04
 * 描述:GenerivTes就是一个普通的类
 * GenericTest<E>是一个泛型类
 * <>里面就是一个参数类型,但是这个类型现在是不确定的,相当于一个占位
 * 但是确定的这个类型是引用数据类型,而不是基本数据类型
 * 版本:1.0
 */
public class GenericTest<E> {
    int age;
    String name;
    E sex;
    public void a(E n){
    }
    public void b(E[] m){
    }
}
class Test{
    //这是一个main方法:是程序的入口
    public static void main(String[] args) {
    //GenericTest进行实例化:
    //(1)实例化的时候不指定泛型:如果在实例化的时候不明确的制定类的泛型,那么认为泛型为Object类型
        GenericTest gt1 = new GenericTest();
        gt1.a("abc");
        gt1.a(17);
        gt1.a(9.8);
        gt1.b(new String[]{"a","b","c"});
    //(2)实例化的时候制定泛型:
        GenericTest<String> gt2=new GenericTest();
        gt2.sex="男";
        gt2.a("abc");
        gt2.b(new String[]{"a","b","c"});
    }
}
复制代码

【2】继承情况:

(1)父类指定泛型

复制代码
class SubGenericTest extends GenericTest<Integer>{

}
class Demo{
    //这是一个main方法:是程序的入口
    public static void main(String[] args) {
        //指定父类泛型,那么子类就不需要指定泛型了,可以直接使用
        SubGenericTest sgt = new SubGenericTest();
        sgt.a(19);
    }
}
复制代码

(2)父类不指定泛型

如果父类不指定泛型,那么子类也会变成一个泛型类,那么这个E的类型可以在创建子类的时候确定

class SubGenericTest2<E> extends GenericTest<E>{

}

(3)测试类

class Demo2{
    //这是一个main方法:是程序的入口
    public static void main(String[] args) {
        SubGenericTest2<String> sgt1 = new SubGenericTest2<>();
        sgt1.a("abc");
        sgt1.sex="女";
    }
}

【3】应用场合

 

  【4】细节

(1)泛型可以定义多个参数类型

public class Test01 <A,B,C>{
    A age;
    B name;
    C sex;
    public void a(A a,B b,C c){
        
    }
}

(2)泛型类的构造器的写法

 

 (3)不同的泛型的引用类型不可以相互赋值

 

【4】泛型如果不指定,那么就会被擦除,类型就会被指定为Object类型

【5】泛型类中的静态方法不能使用泛型方法

 

 

 【6】不能直接使用E[]的创建

 

posted @   爱的加勒比  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示