黑马程序员技术交流社区
标题:
compareTo()的重写
[打印本页]
作者:
飘落
时间:
2013-9-25 21:53
标题:
compareTo()的重写
本帖最后由 飘落 于 2013-9-26 23:09 编辑
import java.util.*;
class TreeMapDemo {
public static void main(String[] args) {
TreeMap<Student,String> tm=new TreeMap<Student,String>();
tm.put(new Student("S1",31),"sn001");
tm.put(new Student("S2",11),"sn002");
tm.put(new Student("S3",41),"sn003");
tm.put(new Student("S4",11),"sn004");
tm.put(new Student("S5",51),"sn005");
tm.put(new Student("S6",91),"sn006");
System.out.println(tm);
}
}
class Student implements Comparable<Student>
{
private String name;
private int age;
Student(String name,int age)
{
this.name=name;
this.age=age;
}
public void setName(String name)
{
this.name=name;
}
public void setAge(int age)
{
this.age=age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public String toString()
{
return name+":"+age;
}
public int compareTo(Student s)
{
int num=age-s.age;
return num!=0?num:name.compareTo(s.name);
}
}
复制代码
重写compareTo()时,代码里面写成s.age、s.name,为什么能正常运行?
因为变量age和name前面有private修饰,所以个人觉得写成s.getAge()、s.getName()才对。
然而,运行结果出乎我的预料。
求解释。
作者:
放飞自己365
时间:
2013-9-25 22:48
用TreeMap建立集合对象来存储元素Student对象,你是说在Student类中实现了Comparable接口,而在Student类中,姓名name和年龄age的控制访问权限是private,而在类中下面实现Comparable接口的compareTo()方法时用的是s.name和s.age吧,这是因为访问权限修饰符private在本类中有效,可以使用本类中的成员的。下面是关于java中的四种访问权限修饰符的作用范围:
360软件小助手截图20130925224613.jpg
(47.21 KB, 下载次数: 89)
下载附件
2013-9-25 22:47 上传
访问权限修饰符
作者:
long362144768
时间:
2013-9-25 22:50
因为compareTo是student的成员函数,当然可以访问成员变量了啊,但是在外部函数中就无法使用s.age,和s.name了。你的思路是对的,也可以用s.getAge()和s.getName(),这个是在外部函数获取对象的成员变量对应的取值。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2