黑马程序员技术交流社区
标题:
在compareTo方法里对象怎么可以直接访问私有程序员变量
[打印本页]
作者:
繁华终成泣
时间:
2013-11-12 19:28
标题:
在compareTo方法里对象怎么可以直接访问私有程序员变量
很疑惑,求解答
class User implements Serializable,Comparable<User>{
private String username;
private String password;
private int age;
public User(String username, String password, int age) {
super();
this.username = username;
this.password = password;
this.age = age;
}
public int compareTo(User o) {
int num = this.age-o.age;
if(num==0)
return this.username.compareTo(o.username);
return num;
}
public String toString(){
return this.username+","+this.password+","+this.age;
}
}
复制代码
作者:
lichao
时间:
2013-11-12 19:39
public int compareTo(User o) {
int num = this.age-o.age; //此函数还在user类中,被private修饰的变量在本类中可以被本类对象访问。
if(num==0)
return this.username.compareTo(o.username);
return num;
}
复制代码
作者:
ysunday
时间:
2013-11-12 19:48
凭感觉回答了就,封装的意思是在别的类中不可访问私有成员,那既然这么说,就是在本类中可以访问私有成员,既然compareTo()方法是在类里边,那就可以访问本类私有成员了,比如你传进来的User o这个对象,从方法就传进类里边了呗,那当然可以访问私有成员了
还有就是 比如你这样
package bbs.test;
public class Test02 {
public static void main(String[] args){
User u1 = new User("haha", "123", 12);
User u2 = new User("haha1", "1231", 12);
u2.age//要是这么访问就不行了,因为这不是在本类中了
System.out.println(u1.compareTo(u2));
}
}
复制代码
上边的代码就不是在本类中了,所以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