1. public class GenericTest<E> {
    2. int age;
    3. String name;
    4. E sex;
    5. public void a(E n){
    6. }
    7. public void b(E[] m){
    8. }
    9. }
    10. class Test{
    11. //这是main方法,程序的入口
    12. public static void main(String[] args) {
    13. //GenericTest进行实例化:
    14. //(1)实例化的时候不指定泛型:如果实例化的时候不明确的指定类的泛型,那么认为此泛型为Object类型
    15. GenericTest gt1 = new GenericTest();
    16. gt1.a("abc");
    17. gt1.a(17);
    18. gt1.a(9.8);
    19. gt1.b(new String[]{"a","b","c"});
    20. //(2)实例化的时候指定泛型:---》推荐方式
    21. GenericTest<String> gt2 = new GenericTest<>();
    22. gt2.sex = "男";
    23. gt2.a("abc");
    24. gt2.b(new String[]{"a","b","c"});
    25. }
    26. }

    父类指定泛型

    1. class SubGenericTest extends GenericTest<Integer>{
    2. }
    3. class Demo{
    4. //这是main方法,程序的入口
    5. public static void main(String[] args) {
    6. //指定父类泛型,那么子类就不需要再指定泛型了,可以直接使用
    7. SubGenericTest sgt = new SubGenericTest();
    8. sgt.a(19);
    9. }
    10. }

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

    1. class SubGenericTest2<E> extends GenericTest<E>{
    2. }
    3. class Demo2{
    4. //这是main方法,程序的入口
    5. public static void main(String[] args) {
    6. SubGenericTest2<String> s = new SubGenericTest2<>();
    7. s.a("abc");
    8. s.sex = "女";
    9. }
    10. }

    ArrayList底层应用就是泛型继承
    image.png
    构造方法中不能写泛型
    image.png
    泛型如果不指定,那么就会被擦除,反应对应的类型为Object类型
    image.png
    不能直接使用E[]的创建
    image.png