在对象还没有形成的时候,我们可以说private成员只能被该类的其他成员访问,class Test { private a = 0; void f() { System.out.println(a);//对象没有形成,我们正在建设类 } }class Test { private int f() { return 0; }
public static void main(String[] args) { Test t = new Test();//在建设类的时候,定义了该实例对象,却因为在类的定义中,可以访问private成员 t.f(); } } class Other { public static void main(String[] args) { Test t = new Test();//不再Test类的定义中,不能访问private t.f(); } } 但是在形成对象后,对象暴露的属性应该是明确的呀!而现在,对象如果处于本体内(类的定义内),他的访问权限扩大了,而出了本体,他的权限有缩小了,这
private 不能访问是指2个以上的类相互访问, class Test { private int f() { return 0; }
public static void main(String[] args) { Test t = new Test(); t.f(); }} 这里,就一个类啊。如果加上那个 public class Test { private int f() { System.out.println("I am f()!"); return 0; }}class Other { public static void main(String[] args) { Test t = new Test(); t.f(); } }肯定就是不行了!
class Other
{
public static void main(String[] args)
{
Test t = new Test();
t.f();
}
}和上面的代码没多大区别吧?
是不可能对自己对象的访问进行限制的。
你的f()方法因为是非static的,
所以在static方法中如果想调用,得通过对象来实现,
这和private没有关系
在本类中是可以访问本类的私有方法的,
在其它类中时,就不能访问另外一个的私有方法。
在main方法中如果想调用static方法时,得通过对象来实现,
或者方法的本身是个static类型,这样才能调用、、、、、
在Test类中定义的一个Test对象和在其他类中定义的一个Test对象有什么不同?按照上面的例子,前者能够访问自身的所有成员(包括private,protected),而后者只能访问public(不在同一个包中)
在main方法里面已经重新创建了类的对象,所以该对象是在该方法内建立,所以该对象可以访问。
这里要讲一下static 关健字在修饰属性时的特点了. 定义: static property 是类的成员,而不是哪个特定的对象. 生成时间 : 当jvm把加载此类时就生成了static property.(相当给了他内存空间).如果不是static那么只有在创建类的实例时才会分配空间.
{
private a = 0;
void f()
{
System.out.println(a);//对象没有形成,我们正在建设类
}
}class Test
{
private int f()
{
return 0;
}
public static void main(String[] args)
{
Test t = new Test();//在建设类的时候,定义了该实例对象,却因为在类的定义中,可以访问private成员
t.f();
}
}
class Other
{
public static void main(String[] args)
{
Test t = new Test();//不再Test类的定义中,不能访问private
t.f();
}
}
但是在形成对象后,对象暴露的属性应该是明确的呀!而现在,对象如果处于本体内(类的定义内),他的访问权限扩大了,而出了本体,他的权限有缩小了,这
正因为static成员是和具体的对象没有关系,所以,在类Test中的stataic方法类创建的对象 和 在其他类中创建的Test对象,在暴露出的成员应该是一样的!
class Test
{
private int f()
{
return 0;
}
public static void main(String[] args)
{
Test t = new Test();
t.f();
}}
这里,就一个类啊。如果加上那个
public class Test
{
private int f()
{
System.out.println("I am f()!");
return 0;
}}class Other
{
public static void main(String[] args)
{
Test t = new Test();
t.f();
}
}肯定就是不行了!
private,其他类不能访问该类对象的private成员所以,一看对象,二看类,要访问对象的成员,先看对象所处的类!这就解释了“对象如果处于本体内(类的定义内),他的访问权限扩大了,而出了本体,他的权限有缩小了”的原因了。
因为类的静态方法中不存在this指针,无法访问.
至于楼主所举的2个例子存在明显的差别,第一个之所以能正常运行,原因在于:
创建的Test对象t本身在类Test中,这样对象t就能正常访问Test中的所有成员
以及方法,这跟是否在静态方法没任何关系;
换句话说,只要你在类Test中的任何一个方法中,创建一个Test对象,你都能够
随意访问类Test中任何成员以及方法;