image.png

    1. package com.itheima.d11_genericity_limit;
    2. import java.util.ArrayList;
    3. public class GenericDemo {
    4. public static void main(String[] args) {
    5. // 这是一个泛型类(集合) 表示这个集合存储的都是BMW类 的对象
    6. ArrayList<BMW> bmws = new ArrayList<>();
    7. bmws.add(new BMW()); // 添加对象
    8. bmws.add(new BMW());
    9. bmws.add(new BMW());
    10. go(bmws);
    11. ArrayList<BENZ> benzs = new ArrayList<>();
    12. benzs.add(new BENZ()); // 添加对象
    13. benzs.add(new BENZ()); // 添加对象
    14. benzs.add(new BENZ()); // 添加对象
    15. go(benzs);
    16. ArrayList<Dog> dogs = new ArrayList<>();
    17. dogs.add(new Dog());
    18. dogs.add(new Dog());
    19. dogs.add(new Dog());
    20. // go(dogs); // 本来只要求车类进来,但是不写上下限,会让狗类都进来
    21. }
    22. /**
    23. * 所有车比赛
    24. * @param cars
    25. */
    26. // 泛型的通配符:? 可以接收任意数据的类型 // 这样写了?extends Car: ?必须是Car或者其子类 泛型上限
    27. public static void go(ArrayList<? extends Car> cars){ // 该go方法,接收BMW宝马集合的对象 不能接收BENZ奔驰集合对象
    28. }
    29. }
    30. // 继承只是能使用父类的方法 这是写继承是为了设置泛型的上下限 ?extends Car: ?必须是Car或者其子类 泛型上限
    31. // ?super Car: ?必须是Car或者其父类 泛型下限(这个用的少)
    32. class BENZ extends Car{ // 虽然BMW和BENZ都继承了Car但是ArrayList<BMW> 和ArrayList<BENZ> 与 ArrayList<Car> 没有关系
    33. }
    34. class BMW extends Car{
    35. }
    36. class Car {
    37. }
    38. class Dog {
    39. }