我们知道在java中,对于类中的成员共有四种访问控制符:public,protected、friendly(空白不写出任何关键字)、private。但是在刚接触java时,我们并不知道这四个访问控制符的具体含义和这四个访问控制符到底是怎样进行访问控制的。
先进行对这四个访问控制符的权限具体说明:
现在具体解释:
1.
package cn.test;
class Demo
{
public void f1(){}
protected void f2(){}
void f3(){}
private void f4(){}
}
package cn.test;
class Test
{
public static void main(String[]args)
{
Demo d=new Demo();
d.f1();//ok
d.f2();//ok
d.f3();//ok
d.f4();//error
}
}
对上面例子的解释:上述两个类Test和Demo,都处于同一个包中cn.test(注:当两个类都没有明显的写出package 包名,那么这两个类默认示为在同一个默认包中).
当在Test类中要对Demo类中的方法进行调用时,那么就必须要先产生Demo类的对象实例来对非静态的方法来进行调用,当成员是静态时也可以用类名.成员名来直接进行调用
而不用产生对象。
回到正题,public 、prtotected、friendly、private这四个访问控制字只能作用于当另外一个类要调用另一个类被这四个访问控制字所修饰的成员时,这四个关键字的访问控制才会起作用。而对于在类中,方法之间的调用不受这四个访问控制的限制,这一点必须知道。
当两个类处于同一个包中,在我们的例子中,Test类想要使用Dmeo类的四个方法,那么就要受到方法的访问控制字的限制。对于Dmeo类的private方法,在类外,Demo类的对象是不能对其进行调用的,只能由Demo类中的内部成员才能调用。
2、
package cn.test2;
class Demo
{
public void f1(){}
protected void f2(){}
void f3(){}
private void f4(){}
}
package cn.test;
class Test
{
public static void main(String[]args)
{
Demo d=new Demo();
d.f1();// public ok
d.f2();//protected error
d.f3();// friendly error
d.f4();//private error
}
}
解释:上述两个类Demo和Test在两个不同的包中cn.test2和cn.test。情况又会变得不同。
3、
package cn.test2;
class Demo
{
public void f1(){}
protected void f2(){}
void f3(){}
private void f4(){}
}
package cn.test;
class Test extends Demo
{
public static void main(String[]args)
{
Demo d=new Demo();
d.f1();// public ok
d.f2();//protected error
d.f3();// friendly error
d.f4();//private error
}
public void print()
{
f2();//protected ok
}
}
上面我们举了三个例子,分别是:
a,两个类在同一个包中:
Test类可以利用newDemo()产生对象实例,调用Dmeo类的public、protected、friendly 成员(包括类的成员方法和类的成员变量)
b.两个类不在同一个包中
Test类可以利用newDemo()产生对象实例,调用Dmeo类的public成员(包括类的成员方法和类的成员变量)
c.两个类不在同一个包中,但是Test却继承了Demo类
Test类可以利用newDemo()产生对象实例,调用Dmeo类的public(包括类的成员方法和类的成员变量),但是因为Test类继承了Demo类,所有Test类内部方法之间可以调用f2()方法,或Test类的对象也可以对f2()方法调用。但是注意:Demo类在Test类中new产生的对象实例还是不能调用protected f2()方法。
public: 可以被所有的类访问
protected:可以被同一个包中的类访问,也可以被处于不同的包中的类访问,但是这个类必须得其进行继承才能使用。
friendly:只能被同一个包中的类访问。
private:只能被本类的成员之间进行访问,本类的对象也不能访问。