返回信息流public class Test {
private int count;
public static void main(String[] args) {
Test t=new Test(99);
System.out.println(t.count);//为什么可以t.count?count不是私有的么?
}
Test(int i){
count=i;
}
}
为什么这个可以通过,不理解了,私有成员怎么可以直接通过对象访问了?
这是一条镜像帖。来源:北邮人论坛 / java / #22195同步于 2012/4/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[问题]私有成员的访问
cb
2012/4/20镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
lz private设置的时候是说在同一个类的方法里是可以访问的,其他类里就不可见。你的main在这里可以当做Test的一个方法,当然可以访问。但是在其他类里就不能访问了。你自己试试
我觉得你说的情况对应的应该是这个吧:
class A{
private int a=0;
public void test(){
a=3;
}
}
这种我可以理解。
但是我说的这种情况是new了一个Test的实例,然后一个实例通过"."操作去访问它自己的私有成员,这个操作为什么也会跟它是否在Test类里相关?
我没搞懂是怎么处理的……为什么在类里面的时候,实例对象能通过"."访问私有成员。
【 在 zhihao 的大作中提到: 】
: lz private设置的时候是说在同一个类的方法里是可以访问的,其他类里就不可见。你的main在这里可以当做Test的一个方法,当然可以访问。但是在其他类里就不能访问了。你自己试试
同楼上……main是否是成员函数和类的实例对象"."访问私有成员为什么是有关的?
【 在 shengzi 的大作中提到: 】
: 因为你的public static void main() 是Test类的一个成员函数
【 在 cb 的大作中提到: 】
: [code=java]
: public class Test {
: private int count;
: ...................
附件(17.3KB) EBU4201-2011-JavaLevelsOfProtection.pdf
【 在 cb 的大作中提到: 】
: 没懂这个图和问题有啥联系?
lz大家已经说得很清楚了。请认真的看看图吧。如果你实在无法理解那我们只能怪自己不会表达意思鸟,bless
【 在 cb 的大作中提到: 】
: [code=java]
: public class Test {
: private int count;
: ...................
lz你这么想,
这个“private”没有那么“private”(虽然是“private”,但也没有那么“自私”),即声明为private的变量可以在同一个类下使用。
我明白你的意思是,既然都“private”了,为啥还能用,可是你反着想下,声明private哪里都不能用、还用费劲声明它干嘛...
能明白就明白了,再不明白我也讲不清了。
java有个醒悟的过程嗯...
我也只能理解为是因为main方法是Test类的一个方法,所以可以调用私有属性了。。。虽然这种调用可以实现,但是尽量还是用getCount()方法。