黑马程序员技术交流社区

标题: TreeSet中的CompareTo函数问题 [打印本页]

作者: 回天之力    时间: 2013-11-4 13:48
标题: TreeSet中的CompareTo函数问题
  1. public int compareTo(Object obj)
  2.     {
  3.             if(!(obj instanceof Student))
  4.                     throw new RuntimeException("不是Student类。");
  5.             Student s=(Student)obj;
  6.             if(this.age>s.getAge())    //1  
  7.                     return 1;
  8.             if(this.age==s.age)    //2     大家主要看着 三行,疑问:为什么age、name为private,而在这里为什么也可以调用?它应该用get方法来得到值啊。为什么?
  9.             {
  10.                 return this.name.compareTo(s.name);//3
  11.             }
  12.             return -1;
  13.     }
复制代码

作者: Mr.Z.Lee    时间: 2013-11-4 14:18
类student未设置相关映射方法!!!!!!!!!!
作者: 赵许星    时间: 2013-11-4 15:27
if(this.age>s.getAge())
if(this.age==s.age)
return this.name.compareTo(s.name);//3

这样的写法,楼主编译通过了吗??

我感觉父类中变量被定义为private,子类只能通过getName()方法获取啊
作者: Clare0621    时间: 2013-11-4 16:17
  1. public int compareTo(Object obj)
  2.     {
  3.             if(!(obj instanceof Student))
  4.                     throw new RuntimeException("不是Student类。");
  5.             Student s=(Student)obj;
  6.             if(this.age>s.getAge())    //1  
  7.                     return 1;
  8.             if(this.age==s.age)    //2    s是Student对象,age是student对象的属性啊,虽然传进来时student被提升为object类型,但是上面已经强转回来了啊,本类对象访问本类私有成员属性天经地义么不是
  9.             {
  10.                 return this.name.compareTo(s.name);//3同age属性
  11.             }
  12.             return -1;
  13.     }
复制代码

作者: 寻丶丶觅    时间: 2013-11-5 09:49
我说下自己的看法,因为该方法是在Student类中,所以可以用s.age。在本类中访问没问题的。但是如果你定义的是比较器。就必须用get方法获取。私有在本类中是可以调用的,在该类外部无法调用而已
作者: 黄炳期    时间: 2013-11-5 10:53
寻丶丶觅 发表于 2013-11-5 09:49
我说下自己的看法,因为该方法是在Student类中,所以可以用s.age。在本类中访问没问题的。但是如果你定义的 ...

提问结束的帖子不再予以加分
作者: 寻丶丶觅    时间: 2013-11-5 10:58
黄炳期 发表于 2013-11-5 10:53
提问结束的帖子不再予以加分

呃,不是为了要分,是觉得上面说的不是让人好理解。
作者: 回天之力    时间: 2013-11-5 20:05
Clare0621 发表于 2013-11-4 16:17

但是这个私有变量age是s对象中的private变量,又不是this中的。。。




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