public class GenericsDemo1 {
    public static void main(String[] args) {
        /*
        泛型不具备继承性,但是数据具备继承性
         */
        ArrayList<Ye> list1 = new ArrayList<>();
        ArrayList<Fu> list2 = new ArrayList<>();
        ArrayList<Zi> list3 = new ArrayList<>();
        method(list1);
        //method(list2);//报错
        //method(list3);//报错

        list1.add(new Ye());//可以
        list1.add(new Fu());//可以
        list1.add(new Zi());//可以
    }
    public static void method(ArrayList<Ye> list){

    }
}
class Ye{

}
class Fu extends Ye{

}
class Zi extends Fu{

}
---------------------------------------
泛型的通配符
public class GenericsDemo2 {
    public static void main(String[] args) {
        /*
        定义一个方法,形参是一个集合,但集合类型不确定,
         */
    }
    /*
    此时泛型方法有个弊端:什么类型的数据都能接受
    
    希望方法只能接收Ye1及其子类的数据
    
    此时可以使用泛型的通配符:
    ? 表示未知类型
    
    ? extends E 表示可以接收E类型及其子类的数据
    ? super E 表示可以接收E类型及其父类的数据
     */
    public static<E> void method(ArrayList<E> list){
        
    }
    public static void method1(ArrayList<?> list){

    }
    public static void method2(ArrayList<? extends Ye1> list){
        
    }
    public static void method3(ArrayList<? super Zi1> list){
        
    }
}
class Ye1{

}
class Fu1 extends Ye1{

}
class Zi1 extends Fu1{

}