package權限控制:java
1)一個package可拆成多個*.java文件,可是一個*.java文件只能有一個public class。只有public class是對外可見的,可見意味着能夠經過import關鍵字引用。ide
2)成員和方法有四種權限,private,default,protected和public,一個比一個寬鬆。spa
3)在同一個包內,default/protected和public是一回事。private不容許繼承。在包外面能訪問到的東西確定是比包裏面要少,於是拆包的時候極可能就會遇到權限問題。繼承
4)比較明顯的規則是private和default在包外訪問不到,而public在包外能訪問。主要的模糊點是protected,它是介於public和default之間的狀況。在外面訪問protected也不是件「容易」的事情,只有在子類中經過super能訪問到。權限控制
下面是展現權限狀況的兩段代碼,TestAuth引用TestAuth1:string
- package TestAuth1;
- public class A {//包外不可見
- public int f_pub;
- protected int f_prot;
- int f_def;
- private int f_pri;
- public void show_public(){
- System.out.println("show_public");
- }
- protected void show_protected(){//包外不可見 //包外子類super可見
- System.out.println("show_protected");
- }
- void show_default(){//包外不可見
- System.out.println("show_default");
- }
- private void show_private(){//包外不可見 //不可見
- System.out.println("show_private");
- }
- }
- class B extends A {//包外不可見
- public void show(){
- //super可見到3個方法
- super.show_public();
- super.show_protected();
- super.show_default();
- }
- }
- package TestAuth;
- import TestAuth1.A;//能見到A
- public class Entry {
- public static void main(String args[])
- {
- A a = new A();//能見到1個方法
- a.show_public();
- B b = new B();//能見到2個方法
- b.show();//經過super訪問父類protected方法
- b.show_public();
- }
- }
- class B extends A {
- void show(){
- //super可見到2個方法
- super.show_public();
- super.show_protected();
- }
- }
參考書:《Thinking in Java 3th Edition》 Bruce Eckelit