java的訪問許可權 一、訪問許可權 1. 許可權簡介 java有四種訪問許可權:public > protected > default > private。 註:protected、private不能修飾類,private不能修飾抽象方法。 2. 許可權詳情 public 所修飾的成員,在任何位置均可被訪 ...
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 Internet\Code\java\cnblogs\myPack\Ask.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 Internet\Code\java\cnblogs\myPack\E.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 Internet\Code\java\cnblogs\temp\E.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 Internet\Code\java\cnblogs\com\E.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。