A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

吴健

中级黑马

  • 黑马币:0

  • 帖子:26

  • 精华:0

© 吴健 中级黑马   /  2012-12-10 12:33  /  1372 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

      TreeSet 里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的
                      compareTo 方法,还是使用的子类的 compareTo 方法,还是会抛异常?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

2 个回复

倒序浏览
本帖最后由 xjandrew 于 2012-12-12 01:13 编辑

结果会抛异常
  1. import java.util.*;



  2. public class TreesetTest
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 //TreeSet<? extends Person> ts = new TreeSet<Student>();//执行这句的话,add方法报错,类型不匹配
  7.                ts.<FONT color=red>add</FONT>(new Person("zhangsan",23));
  8.                ts.<FONT color=red>add</FONT>(new Person("zhangsan",22));
  9.                 TreeSet<? super Student> ts = new TreeSet<Student>();//执行这句话,Person报错,类型转换异常(Person无法转成Student)
  10.                 ts.add((Student) new Person("zhangsan",23));
  11.                 ts.add((Student) new Person("zhangsan",22));
  12.                 ts.add(new Student("zhangsan",23,3));
  13.                 ts.add(new Student("zhangsan",22,2));
  14.                
  15.         }
  16. }

  17. class <FONT color=red>Person</FONT> implements  Comparable<Student>
  18. {
  19.         private String name;
  20.         private int age;
  21.         
  22.         Person(String name,int age)
  23.         {
  24.                 this.name = name;
  25.                 this.age = age;
  26.         }
  27.         public String getName()
  28.         {
  29.                 return name;
  30.         }
  31.         public int getAge()
  32.         {
  33.                 return age;
  34.         }
  35.         
  36.         public int compareTo(Person p)
  37.         {
  38.                 int num = this.name.compareTo(p.getName());
  39.                 if(num == 0)
  40.                         return new Integer(this.age).compareTo(new Integer(p.getAge()));
  41.                 return num;
  42.                
  43.         }
  44.         @Override
  45.         public int compareTo(Student o) //这里还必须留给子类重写
  46.         {
  47.                 // TODO Auto-generated method stub
  48.                 return 0;
  49.         }
  50. }

  51. class Student extends Person //implements  Comparable<Student>加这句不行
  52. {
  53.         private int nianji;
  54.         Student(String name,int age,int nianji)
  55.         {
  56.                 super(name,age);
  57.                 this.nianji = nianji;
  58.         }
  59.         public int compareTo(Student s)
  60.         {
  61.                 int num = new Integer(this.nianji).compareTo(new Integer(s.getNianji()));
  62.                 return num;
  63.         }
  64.         public int getNianji()
  65.         {
  66.                 return nianji;
  67.         }
  68. }
  69. *
复制代码

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
按以上代码来看,无法同时放入父类和子类的实例对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马