黑马程序员技术交流社区

标题: 在compareTo方法里对象怎么可以直接访问私有程序员变量 [打印本页]

作者: 繁华终成泣    时间: 2013-11-12 19:28
标题: 在compareTo方法里对象怎么可以直接访问私有程序员变量
很疑惑,求解答
  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. }
复制代码

作者: lichao    时间: 2013-11-12 19:39
  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.         }
复制代码

作者: ysunday    时间: 2013-11-12 19:48
凭感觉回答了就,封装的意思是在别的类中不可访问私有成员,那既然这么说,就是在本类中可以访问私有成员,既然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会报错
作者: 赵晓海    时间: 2013-11-12 20:40
类的私有成员变量只在本类中有效。
在你的问题中,类User中的私有成员变量username和age的作用域都是整个User类。而compareTo方法也是User类的中的方法。因此compareTo中的对象可以直接访问username和age这两个私有成员变量。
作者: 孙铮    时间: 2013-11-13 02:01
因为你的comparaTo方法在User类中,属于成员方法,而你的User类中的变量username,password,age,都属于成员变量,虽然被私有化,但是因为在同一个类中,成员方法可以访问私有化成员变量,建议楼主以后通过set/get方法给成员变量赋值,和取值
public void setAge(int age)
{
       this.age = age;
}

public int getAge()
{
      return age;
}






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