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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

很疑惑,求解答
  1. class User implements Serializable,Comparable<User>{
  2.         private String username;
  3.         private String password;
  4.         private int age;

  5.         public User(String username, String password, int age) {
  6.                 super();
  7.                 this.username = username;
  8.                 this.password = password;
  9.                 this.age = age;
  10.         }

  11.         public int compareTo(User o) {
  12.                 int num = this.age-o.age;
  13.                 if(num==0)
  14.                         return this.username.compareTo(o.username);
  15.                 return num;
  16.         }
  17.         public String toString(){
  18.                 return this.username+","+this.password+","+this.age;
  19.         }
  20.        
  21. }
复制代码

评分

参与人数 1黑马币 +2 收起 理由
To + 2 金币鼓励,哥们以后要发好贴,质量贴。.

查看全部评分

4 个回复

倒序浏览
  1. public int compareTo(User o) {
  2.                 int num = this.age-o.age;       //此函数还在user类中,被private修饰的变量在本类中可以被本类对象访问。
  3.                 if(num==0)
  4.                         return this.username.compareTo(o.username);
  5.                 return num;
  6.         }
复制代码
回复 使用道具 举报
凭感觉回答了就,封装的意思是在别的类中不可访问私有成员,那既然这么说,就是在本类中可以访问私有成员,既然compareTo()方法是在类里边,那就可以访问本类私有成员了,比如你传进来的User o这个对象,从方法就传进类里边了呗,那当然可以访问私有成员了

还有就是 比如你这样
  1. package bbs.test;

  2. public class Test02 {
  3.         public static void main(String[] args){
  4.                
  5.                 User u1 = new User("haha", "123", 12);
  6.                 User u2 = new User("haha1", "1231", 12);
  7.                 u2.age//要是这么访问就不行了,因为这不是在本类中了
  8.                 System.out.println(u1.compareTo(u2));
  9.         }
  10. }
复制代码
上边的代码就不是在本类中了,所以u2.age会报错

评分

参与人数 1技术分 +1 收起 理由
To + 1 多来云七帮助别人解决问题发帖.

查看全部评分

回复 使用道具 举报
类的私有成员变量只在本类中有效。
在你的问题中,类User中的私有成员变量username和age的作用域都是整个User类。而compareTo方法也是User类的中的方法。因此compareTo中的对象可以直接访问username和age这两个私有成员变量。
回复 使用道具 举报
因为你的comparaTo方法在User类中,属于成员方法,而你的User类中的变量username,password,age,都属于成员变量,虽然被私有化,但是因为在同一个类中,成员方法可以访问私有化成员变量,建议楼主以后通过set/get方法给成员变量赋值,和取值
public void setAge(int age)
{
       this.age = age;
}

public int getAge()
{
      return age;
}

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马