黑马程序员技术交流社区
标题:
对象访问成员的问题
[打印本页]
作者:
郭天龚
时间:
2013-7-15 12:27
标题:
对象访问成员的问题
本帖最后由 郭天龚 于 2013-7-16 09:12 编辑
import java.util.*;
class Person implements Comparable<Person>
{
private String name;
private int age;
Person(String name,int age){
this.name=name;
this.age=age;
}
public int compareTo(Person p){
int flag=new Integer(this.age).compareTo(new Integer(p.age));
if (flag==0)
{
return this.name.compareTo(p.name);
}
return flag;
}
public String toString(){return this.name+"..."+this.age;}
}
class Test
{
public static void main(String[] args)
{
TreeSet<Person>ts=new TreeSet<Person>();
ts.add(new Person("a",20));
ts.add(new Person("b",21));
ts.add(new Person("a",20));
ts.add(new Person("c",20));
System.out.println(ts);
}
}
复制代码
上面这段代码编译和运行都是没有问题的,但是我有一个疑问就是
int flag=new Integer(this.age).compareTo(new Integer(p.age));在这行中对象p为什么直接可以用p.age的方式来访问他的私有成员。
我做了一个测试
class Person
{
private String name;
Person(String name){
this.name=name;
}
}
class Test2
{
public static void main(String[] args)
{
Person p=new Person("guotiangong");
System.out.println(p.name);
}
}
复制代码
在这一行中
System.out.println(p.name);通过P.name来访问私有成员,编译就会报错。说是不能访问他的私有成员。
我要问的就是为什么i
nt flag=new Integer(this.age).compareTo(new Integer(p.age));在这行中对象p可以用p.age的方式来访问他的私有成员。那位大神帮我解惑一下,谢谢!
作者:
longlangcx
时间:
2013-7-15 12:53
本帖最后由 longlangcx 于 2013-7-15 12:55 编辑
private的意义在于,private成员只能被本类对象访问,注意,是本类对象,而不是本对象。在本类方法中,可以直接操作private属性,既可以访问自己的,也可以访问别人的。比如equals方法或者LZ写的compareTo方法。
这样看起来好像是破坏了封装性,其实并没有,因为这个类是你设计的,访问其他同类对象private成员的方法也是你设计的,如果你不提供访问其他同类对象私有属性的方法就不会破坏封装,你这样设计了,说明你有这方面的需求,比如像equals或者compareTo这样的方法,要比较两个对象的私有属性,自然需要可以访问。
你写的这俩程序,上面的可以直接访问是因为访问代码写在本类当中,具有访问权限;下面的不可以访问是因为访问代码写在其他类当中,没有访问权限。
作者:
林杰
时间:
2013-7-15 13:40
你看清你写的P.AGE在哪了么?PRIVATE将本类实现细节对外部隐藏,对内不隐藏,你在本类中自然可以调用
作者:
郭天龚
时间:
2013-7-16 09:12
longlangcx 发表于 2013-7-15 12:53
private的意义在于,private成员只能被本类对象访问,注意,是本类对象,而不是本对象。在本类方法中,可以 ...
谢谢你的解惑!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2