java的访问权限
一、访问权限
1. 权限简介
java有四种访问权限:public > protected > default > private。
注:protected、private不能修饰类,private不能修饰抽象方法。
2. 权限详情
public ------所修饰的成员,在任何位置均可被访问。
protected -所修饰的成员,能被其子类访问。
default -----所修饰的成员,只能在同包中被访问。
private -----所修饰的成员,只能在本类中被访问。
访问权限 | 同类 | 同包 | 不同包子类 | 不同包非子类 |
public | ✔ | ✔ | ✔ | ✔ |
protected | ✔ | ✔ | ✔ | × |
default | ✔ | ✔ | × | × |
private | ✔ | × | × | × |
二、权限测试
1. 同类
/* * @Author: bpf * @FilePath: Learn in the InternetCodejavacnblogsmyPackAsk.java */ package cnblogs.myPack; public class Ask { public String s1 = "我是公共"; String s2 = "我是友好"; protected String s3 = "我是受保护"; private String s4 = "我是私有"; public void speak(String s) { System.out.println(s); } public static void main(String args[]) { Ask ask = new Ask(); ask.speak(ask.s1); ask.speak(ask.s2); ask.speak(ask.s3); ask.speak(ask.s4); } }
由此可见,在同类中,四种权限均可被访问。
2. 同包
/* * @Author: bpf * @FilePath: Learn in the InternetCodejavacnblogsmyPackE.java */ package cnblogs.myPack; public class E { public static void main(String args[]) { Ask ask = new Ask(); ask.speak(ask.s1); ask.speak(ask.s2); ask.speak(ask.s3); ask.speak(ask.s4); } }
由此可见,在同包中,四种权限只有private不能被访问。
3. 不同包子类
/* * @Author: bpf * @FilePath: Learn in the InternetCodejavacnblogs empE.java */ package cnblogs.temp; import cnblogs.myPack.Ask; public class E extends Ask { public static void main(String args[]) { Ask father = new Ask();// 使用父类的对象访问 father.speak(father.s1); father.speak(father.s2); father.speak(father.s3); father.speak(father.s4); E child = new E(); // 使用子类的对象访问 child.speak(child.s1); child.speak(child.s2); child.speak(child.s3); child.speak(child.s4); } }
由此可见,当使用父类创建的对象访问时,只能访问public;当使用子类创建的对象访问时,可以访问public、protected。
4. 不同包非子类
/* * @Author: bpf * @FilePath: Learn in the InternetCodejavacnblogscomE.java */ package cnblogs.com; import cnblogs.myPack.Ask; public class E{ public static void main(String args[]) { Ask ask = new Ask(); ask.speak(ask.s1); ask.speak(ask.s2); ask.speak(ask.s3); ask.speak(ask.s4); } }
由此可见,在不同包非子类中,只能访问public。