黑马程序员技术交流社区

标题: TreeSet问题 [打印本页]

作者: why168    时间: 2014-2-15 12:39
标题: TreeSet问题
本帖最后由 why168 于 2014-2-15 12:39 编辑

TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常!
代码:
public class Parent implements Comparable {
    private int age = 0;
    public Parent(int age){
       this.age = age;
    }
    public int compareTo(Object o) {
       // TODO Auto-generated method stub
       System.out.println("method of parent");
       Parent o1 = (Parent)o;
       return age>o1.age?1:age<o1.age?-1:0;
    }
}
public class Child extends Parent {
    public Child(){
       super(3);
    }
    public int compareTo(Object o) {
           // TODO Auto-generated method stub
           System.out.println("method of child");
//         Child o1 = (Child)o;
           return 1;
    }
}
public class TreeSetTest {
    /**
     * @param args
     */
    public static void main(String[] args) {
      // TODO Auto-generated method stub
      TreeSet set = new TreeSet();
       set.add(new Parent(3));
       set.add(new Child());
       set.add(new Parent(4));
       System.out.println(set.size());
    }
}


作者: 奋斗的小胖子    时间: 2014-2-15 16:10
是问题还是分享经验?
作者: 黄志成    时间: 2014-2-15 17:13
试了一下,不会抛异常。
添加到哪个对象,就会调用哪个对象的compareTo()方法。
作者: 方棋    时间: 2014-2-15 17:38

当使用子类的比较器的时候会抛一个不能转换异常
作者: 徐青松    时间: 2014-2-16 13:47
添加调用了哪个对象就会调用该对象的比较器,添加父类Person时,调用父类比较器这点应该你能想通,添加子类Child时,Child是Person的子类,覆盖了Person类的比较器方法,所以是调用Child的比较器方法。从java的特性出发的话,很多东西都会理解的更深刻,希望能帮到你




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