TreeSet<Student> t1 = new TreeSet<Student>(new Comp()); //这里用来比较学生只是一个多态的思想,这里的只会当做Person 来看的,
TreeSet<Worker> t2 = new TreeSet<Worker>(new Comp());// 同上:这里的Worker 只会当作Person 来看的。
class Comp implements Comparator<Person> {
public int compare(Person p1, Person p2) { //这里的参数就是多态,这里不管是传的是学生,还是工人都只会当作Person来看的。是把他们当作 Person 来 比较的。
return p1.getName().compareTo(p2.getName());
}
}
回答:代码中 TreeSet 里传的是 Person类型,那不就是说传入的比较器只能接受比较 Person 类或者 Person 的父类的对象吗? 为什么能比较 Person 的子类 Student 和 Worker 类型呀???
注意:你理解的 这里只能接受比较 Person 类或者 Person 的父类的对象 是对的,但是你要记清多态思想,可以将子类对象 提升为父类用,只是要失去子类的特有行为和属性,
所以TreeSet 里面我们进行比较 Student 和 Worker ,都是把他们当作Person来看的,
提示:你要留意 compare(Person p1, Person p2) 这个方法的参数类型。 |