泛型的学习

一、泛型的定义

在这里插入图片描述

二、泛型类

在这里插入图片描述

三、泛型接口

以下代码只是为了体现泛型接口的大致运用,不做具体操作

  • Data接口:
package com.genericity_interface;

import java.util.ArrayList;

//泛型接口
public interface Data<T> {
    //里面的类型对象也可以继承,后面运用的时候就只能是被继承的或者他的子类
    //public interface Data<T extends Animal>{}

    //对象
    void add(T t);
    //返回值类型是泛型集合
    ArrayList<T> getByName(String name);
}
  • Student类:
package com.genericity_interface;

public class Student {
}
  • Teacher类:
package com.genericity_interface;

public class Teacher {
}
  • StudentData类:
package com.genericity_interface;

import java.util.ArrayList;

public class StudentData implements Data<Student>{
    //按alt+回车键直接重写全部
    @Override
    public void add(Student student) {

    }

    @Override
    public ArrayList<Student> getByName(String name) {
        return null;
    }
}
  • TeacherData类:
package com.genericity_interface;

import java.util.ArrayList;

//实现类
public class TeacherData implements Data<Teacher>{

    //实现类实现接口,必须重写完全部接口的全部抽象方法,否则实现类需定义为抽象类
    @Override
    public void add(Teacher teacher) {

    }

    @Override
    public ArrayList<Teacher> getByName(String name) {
        return null;
    }
}
  • Test主类:
package com.genericity_interface;

public class Test {
    public static void main(String[] args) {
        //目的:掌握泛型接口的定义和使用
        //场景:系统需要处理学生和老师的数据,需要提供2个功能,保存对象数据,根据名称查询数据
    }
}

四、泛型方法

在这里插入图片描述

  • 车类:
package com.genericity_method;
public class Car {
}
  • 宝马类:
package com.genericity_method;
public class BaoM extends Car{
}
  • 奔驰类:
package com.genericity_method;
public class Benc extends Car{
}
  • 狗类(做对比用):
package com.genericity_method;
public class Dog {
}
  • Test类:
package com.genericity_method;

import java.sql.Array;
import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        test("hello");
        System.out.println(test("java"));
        System.out.println(test(2));

        //传进一个狗对象
        Dog d = test(new Dog());
        System.out.println(d);

        //让所有的汽车参加比赛
        //向车集合中加入一辆宝马和一辆奔驰
        ArrayList<Car> cars = new ArrayList<>();
        cars.add(new BaoM());
        cars.add(new Benc());
        go(cars);

        //向宝马集合中加入两辆宝马
        ArrayList<BaoM> baoms = new ArrayList<>();
        baoms.add(new BaoM());
        baoms.add(new BaoM());
        go(baoms);

        //向奔驰集合中加入两辆奔驰
        ArrayList<Benc> bencs = new ArrayList<>();
        bencs.add(new Benc());
        bencs.add(new Benc());
        go(bencs);

        //测试:狗参与比赛
//        ArrayList<Dog> dogs = new ArrayList<>();
//        dogs.add(new Dog());
//        dogs.add(new Dog());
//        go(dogs);
    }

    //第一种:ArrayList<Car>和ArrayList<BaoM>以及ArrayList<Benc>是没关系的,相当于公共厕所和男厕、女厕一样,公厕男女都能进而男女厕不同
    //这种都导致go(baoms);和go(bencs);报错
//    public static void go(ArrayList<Car> cars){
//
//    }

    //第二种:什么方法都接
//    public static <T> void go(ArrayList<T> cars){
//
//    }

    //第三种:在第二种的基础上做出改变
    //表示形参必须的基于Car父类的或者是Car
    //其实ArrayList<T>本身就是一个泛型类,而<T extends Car>处有单独定义一个泛型类也是没有必要的(可以去掉),因此出现了第四种
//    public static <T extends Car> void go(ArrayList<T> cars){
//
//    }

    //第四种
    //ArrayList<>是泛型;
    // ‘?‘:通配符,在使用泛型的时候可以代表一切类型
    //”? extends Car"(上限),代表是Car或者他的子类;"? super Car"(下限);
    public static void go(ArrayList<? extends Car> cars){

    }

    //泛型方法
    //泛型变量是T,形参是泛型对象,返回值类型也是T(刚好t是泛型类型T的对象)
    public static <T> T test(T t){
        return t;
    }

}

五、泛型的设置

在这里插入图片描述

六、注意事项

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值