package java4; import com.sun.org.apache.xpath.internal.operations.NotEquals; import java1.Person; import org.junit.Test; import java.util.*; /** * * 1.泛型在继承方面的体现 * * * 2.通配符的使用 * @author 冀帅 * @date 2020/8/14-16:24 */ public class GenericTest { /* * 1.泛型在继承方面的体现 * 虽然类A是类B的一个父类,但是G<A>和G<B>二者不具备子父关系,二者是并列关系。 * 补充:类A是类B的一个父类,A<G>是 B<G>的父类 * * */ @Test public void test1(){ Object obj = null; String str = null; obj=str; Object[] arr1 = null; String[] arr2 = null; arr1=arr2;//子类对象可以赋给父类对象 List<Object> list1 = null; List<String> list2 = null; // list1=list2;//编译错误 此时的list1和list2的类型不具备子父类关系 Date date = new Date(); // str =date;//编译错误 } @Test public void test2(){ AbstractList<String> list1 = null; List<String> list2 = null; ArrayList<String> list3 = null; list1 = list3;//正确 list2 = list3;//正确 List<String> list4 = new ArrayList<>(); } /* *2.通配符的使用 * 通配符:? * 类A是类B的父类,G<A>和G<B>是没有关系的,二者共同的父类时:G<?> * * * */ @Test public void test3(){ List<Object> list1 = null; List<String> list2 = null; List<?> list = null;//通用父类 list=list1; list=list2; // print(list1); // print(list2);编译通过 // List<String> list3 = new ArrayList<>(); list3.add("AA"); list3.add("BB"); list3.add("CC"); list = list3; //添加(写入):对于List<?>就不能向其内添加数据。 //除了添加null之外 // list.add("DD"); // list.add("?");编译不成功 list.add(null); //获取(读取):允许读取数据,读取的数据类型为Object。 Object o = list.get(0); System.out.println(o);//AA } public void print(List<?> list){ Iterator<?> iterator = list.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } } }