Java中訪問許可權修飾符protected, default
作用域 |
當前類 |
同package |
子孫類 |
其他package |
public |
√ |
√ |
√ |
√ |
protected |
√ |
√ |
√ |
× |
default |
√ |
√ |
× |
× |
private |
√ |
× |
× |
× |
預設訪問許可權(成員變數前面不加public protected 和 private)
重點看protected和default兩種許可權的區別:對於protected成員變數,子孫類在任何地方都能訪問(包內或者包外),但是對於default或者說預設成員變數,其實是不存在子孫類訪問許可權的概念的,就是說如果子孫類在包內,則可以訪問,子孫類在包外則不可以訪問。 protected在其子類中可以訪問,無論是子類內部還是子類的例項,無論它們是在哪個包中, 但如果子類與父類不在同一個包中,在子類中用父類的例項去訪問的話不可以 如: package zqd.demo;
public class Parent {
protected int age;
}
子類:不在同一包 package zqd.thread;
import zqd.demo.Parent;
public class Task extends Parent{
public static void main(String[] args) {
Task p = new Task();
System.out.println(p.age);//正確 Parent p = new Parent(): System.out.println(p.age); // 編譯錯誤
}
}