Java 訪問控制符詳細--private,預設,protected,public
阿新 • • 發佈:2021-02-11
訪問控制符(*)
訪問控制符 | 同類 | 同包 | 子類 | 不同包 |
---|---|---|---|---|
public | y | y | y | y |
protected | y | y | y | n |
預設(就是什麼都不寫) | y | y | n | n |
private | y | n | n | n |
注意點1:這個就是很籠統的一個表。得重新仔細劃分
類的關係:同一個目錄只是當前層,比如說C:a/b/c a/b/d 在c目錄下的才是同包
同類:就是當前類自身。
同包子類:同一個目錄下的子類
同包類:同一個目錄下的同級類
同包子包子類:同一個目錄下的目錄的子類
同包子包類:同一個目錄下的目錄的類
不同包類:不在一個目錄下的類
不同包子類:不在一個目錄下的子類
訪問控制符 | 同類 | 同包子類 | 同包類 | 同包子包子類 | 同包子包類 | 不同包類 | 不同包子類 |
---|---|---|---|---|---|---|---|
public | y | y | y | y | y | y | y |
protected | y | y | y | y(*) | n | n | y(*) |
預設 | y | y | y | n | n | n | n |
private | y | n | n | n | n | n | n |
簡述:public在哪都可以,private只有當前類內。protect同類+同包(子包不行)+子類(只要有繼承無論在哪)。默認同類+同包(子包不行)
而且這些修飾符可以修飾類,方法,屬性。
注意點2: 你測試protected時的子類訪問許可權時需要注意下面的。
package socker.a1;
public class A1 {
protected void a1(){
System. out.println("a1");
}
}
--------------------------------------------------
package socker.a2;//不同包
import socker.a1.A1;
public class A2 extends A1{
public static void main(String[] args) {
A2 a2 = new A2();//在這裡你得使用A2去使用繼承自A1的方法。
//A1 a1 = new A1(); 這樣是不行的,對與不同包的類來說protected是不可見的
a2.a1();
}
}
---------------------------------------------------
//同樣的子包下的繼承也是需要去使用當前類自己的物件繼承來的方法
package socker.a1.a11;//子包
import socker.a1.A1;
public class A4 extends A1 {
public static void main(String[] args) {
A4 a4 = new A4();
a4.a1();
}
}
目錄結構: