
package com.itheima.d11_genericity_limit;import java.util.ArrayList;public class GenericDemo { public static void main(String[] args) { // 这是一个泛型类(集合) 表示这个集合存储的都是BMW类 的对象 ArrayList<BMW> bmws = new ArrayList<>(); bmws.add(new BMW()); // 添加对象 bmws.add(new BMW()); bmws.add(new BMW()); go(bmws); ArrayList<BENZ> benzs = new ArrayList<>(); benzs.add(new BENZ()); // 添加对象 benzs.add(new BENZ()); // 添加对象 benzs.add(new BENZ()); // 添加对象 go(benzs); ArrayList<Dog> dogs = new ArrayList<>(); dogs.add(new Dog()); dogs.add(new Dog()); dogs.add(new Dog());// go(dogs); // 本来只要求车类进来,但是不写上下限,会让狗类都进来 } /** * 所有车比赛 * @param cars */ // 泛型的通配符:? 可以接收任意数据的类型 // 这样写了?extends Car: ?必须是Car或者其子类 泛型上限 public static void go(ArrayList<? extends Car> cars){ // 该go方法,接收BMW宝马集合的对象 不能接收BENZ奔驰集合对象 }}// 继承只是能使用父类的方法 这是写继承是为了设置泛型的上下限 ?extends Car: ?必须是Car或者其子类 泛型上限// ?super Car: ?必须是Car或者其父类 泛型下限(这个用的少)class BENZ extends Car{ // 虽然BMW和BENZ都继承了Car但是ArrayList<BMW> 和ArrayList<BENZ> 与 ArrayList<Car> 没有关系}class BMW extends Car{}class Car {}class Dog {}