黑马程序员技术交流社区

标题: <? super E>不是E类型及其父类都可以满足吗?接口是却接收子类 [打印本页]

作者: 左右.律    时间: 2016-9-13 23:25
标题: <? super E>不是E类型及其父类都可以满足吗?接口是却接收子类
题:
[Java] 纯文本查看 复制代码
public class Demo2_Genric {

        /**
         * 泛型固定下边界
         * ? super E  
         *
         * 泛型固定上边界
         * ? extends E
         */
        public static void main(String[] args) {
                //demo1();
                TreeSet<Student> ts1 = new TreeSet<>(new CompareByAge());
                ts1.add(new Student("张三", 33));
                ts1.add(new Student("李四", 13));
                ts1.add(new Student("王五", 23));
                ts1.add(new Student("赵六", 43));
               
                TreeSet<BaseStudent> ts2 = new TreeSet<>(new CompareByAge());
                ts2.add(new BaseStudent("张三", 33));
                ts2.add(new BaseStudent("李四", 13));
                ts2.add(new BaseStudent("王五", 23));
                ts2.add(new BaseStudent("赵六", 43));
               
                System.out.println(ts2);
        }

        public static void demo1() {
                ArrayList<Student> list1 = new ArrayList<>();
                list1.add(new Student("张三", 23));
                list1.add(new Student("李四", 24));
               
                ArrayList<BaseStudent> list2 = new ArrayList<>();
                list2.add(new BaseStudent("王五", 25));
                list2.add(new BaseStudent("赵六", 26));
               
                list1.addAll(list2);
        }

}

class CompareByAge implements Comparator<Student> {

        @Override
        public int compare(Student s1, Student s2) {
                int num = s1.getAge() - s2.getAge();
                return num == 0 ? s1.getName().compareTo(s2.getName()) :  num;
        }
       
}

比较器定义的下限是Student对吧,不是应该是接收它或者它的父类吗?为什么这里接收的是子类呢?理解不能.





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2