java中权限控制符有:private(私有权限控制)、friendly(包权限控制)、 protected(继承权限控制), public(共有权限控制)
1. private : 关键字private的意思是,除了包含该成员的类之外, 其他任何类都无法访问这个成员(包括属性, 行为), 由于处于同一个包中的其他类是无法访问private成员的, 因此使用private相当于是隔离自己。
2. 包权限控制 : java中不加任何权限关键词修饰成员、类,则默认为包权限控制, 使用包权限修饰则表示在同一包中的其他类对该成员具有访问权限。
3. protected : 继承权限控制, 表示在同一包中, 以及继承该成员所属类的类具有访问权限。
package com.mjlf.myBatis.accessControl.user; /** * Created by a123 on 16/12/10. */ public class User { private void showPri(){ System.out.println("function of private"); } void showPackage(){ System.out.println("function of package control"); } protected void showPro(){ System.out.println("function of protected"); } public void showPub(){ System.out.println("fucntion of public"); } }
与User类同包的Test类进行测试:
由于User类中showPri() 方法是private修饰的, 所以在Test中是不可见的, 因此编译报错。
而其他的权限修饰符都具有同包可见性, 所以能正常编译运行, 效果如下
package com.mjlf.myBatis.accessControl.user; /** * Created by a123 on 16/12/10. */ public class Test { public static void main(String[] args){ User user = new User(); user.showPub();//fucntion of public user.showPro();//function of protected user.showPackage();//function of package control // user.showpri(); //编译通不过, 找不到function showpri(); } }与User不同包的Test测试类该类中第一个main方法是在Test类没有继承User类时的情况,这时只有showPub()方法能正常编译运行, 其他方法都编译出错, 因为如上所述, 其他方法都只有在同包,或是继承类User类的类中才能访问第二个main方法是在继承User后的情况, 这时showPro方法也能正常执行。运行结果:function of protected fucntion of public Process finished with exit code 0package com.mjlf.myBatis.accessControl.entity; import com.mjlf.myBatis.accessControl.user.User; /** * Created by a123 on 16/12/10. */ public class Test extends User{ // public static void main(String[] args){ // User user = new User(); // user.showPub();//fucntion of public user.showPro();//function of protected user.showPackage();//function of package control user.showpri(); //编译通不过, 找不到function showpri(); // } public static void main(String[] args){ Test test = new Test(); test.showPro(); test.showPub(); } }