class Comp implements Comparator<Person>{
//2:泛型下限:下限写法是规定这样写的吗:? super E,如果是,那这块为什么不是(? super Person)这样写呢?而是直接写成了Person
//3:尤其对泛型下限很是不解,如果说下限限制了,那person有个子类Student,为什么不是按格式写成(? super Student)呢?到底怎么样理解泛型下限的限制呢?比如上限最大到父类,那(? extends Person)很容易理解,但是下限如果说是Student是限制下限的,那下限应该写成(? super Student)啊,为什么要是? super Person呢? 而且还把写法直接写成person了,为什么?
请理解清晰的同学帮忙分析下,我在好好理理思路,作者: 杨玉辉 时间: 2013-3-14 21:02
第一个理解成继承 好说 ? extends E 源于子类
第2个 理解成父类 这么讲 ? super E 是E的高等类,即限定 子类的最低级别
如下:定义3个类 Person, Student ,Worker
class Person() class Student() extends Person class Worker() extends Person
{ { {
void sleep() void study() void work()
} } }
Person p = new Person(); //很清晰
Person s =new Student(); // 只能定义 Student 子类对象 s
Person w =new Worker(); // 也只能定义 Worker 子类对象 w
能理解 p.study() 与 p.work() 不能被调用么?不难吧。
问题就是 s.sleep()与 w.sleep() 都可以实现,定义泛型<Person> 后Student 和 Work 都可以调用Person的方法,继承了,当然可以实现。
?super Student 与 ? super Worker 是不是 范围就都可以指向Person ,将 Student s 与Worker w 两个子类对象,通过Person 类 来定义这两个子类对象 ,可以再回头去看
s 与w 定义,可以了解
对象 s 与 w 都可以调用父类方法 sleep(),那么将此泛型定义为<Person> 是不是就可以接 s 与 w 来实现 。就好像定义了一个<T> 只要是T 或者 T 的子类 都可以调用T的方法么。
至于 ? super Person 这样不必再说了吧,下限是Person的话,你怎么接收 Person的子类 Student 和Worker 呢?