Think IN JAVA --------JAVA訪問許可權控制

菜雞03號發表於2016-09-06

1.JAVA為類中的field以及mehod提供四種訪問許可權:public     protected   private  (預設訪問許可權)包訪問許可權


1>public 修飾的field method ,包內其他的類以及外包中的類均可訪問


2>private 修飾的field method , 只有同一類中的其他field 或method 才能訪問該field或方法


3>包訪問許可權   沒有任何訪問許可權控制符修飾的field method預設為包訪問許可權,只有處於同一包內的其他的類才可以訪問,但對於這個包之外的類訪問許可權為private


4>protected :繼承訪問許可權,a.建立一個新包,並且來自另一個包中繼承類,那麼唯一可以訪問的就是源包中的public      b.在同一個包內執行繼承工作,就可以操縱所有的包訪問許可權成員以及public成員   c.protected也提供包訪問許可權,即處於同一包內的其他的類才可以訪問



2.java中的內部類以及處於同一個.java檔案下的其他類


A.可以使用private \protected\預設  修飾,但內部類中的field\method必須都有static修飾,因此內部類也必須用static 修飾   

                     

1>private 修飾的內部類

public class TestInnerStatic { 

private static class InnerClass { 

public static void doSomething() { 

System.out.println("private Class doSomething"); 

} 

} 

public static void main(String[] args) { 

InnerClass.doSomething(); 

} 
} 

這個地方一定要注意了:內部類中方法只能是static的,因此,內部類也要宣告為靜態的! 

你如果把 public class TestInnerStatic 這個外部類的修飾符改為private,編譯器馬上就報錯了!

不推薦內部類的寫法-----這跟物件導向的理念是不協調的。但是作為java程式設計師,這個基本知識是要懂得,在特殊情況下很有必要使用----訪問許可權!
</pre><pre class="java" name="code" snippet_file_name="blog_20160906_8_304824" code_snippet_id="1869320">
<span style="font-size:18px;">2>沒有任何許可權控制符號修飾的內部類</span>
public class CC {
   
 protected int i=5;
 private int k=0;
 public int s=3;
 static class GG{
    static int g=0;
 }
 public  static void main(String []args)
 {
  CC cc=new CC();
  System.out.println(GG.g);
 }
}
這個 地方一定要注意:內部類中的方法只能是static 的,所以內部類也要申明為靜態
</pre><pre class="java" name="code" snippet_file_name="blog_20160906_8_304824" code_snippet_id="1869320">
<span style="font-size:18px;">3>protected修飾的內部類同上所述</span>
<div>package org.c;</div><div>
</div><div>public class CC {
   
 protected int i=5;
 private int k=0;
 public int s=3;
 protected static class GG{
    static int g=0;
 }
 public  static void main(String []args)
 {
  CC cc=new CC();
  System.out.println(GG.g);
 }
}</div><div>
</div>



 B.java中位於同一個.java檔案的除內部類以及public類外的其他類,都不可以用private\protected修飾,該類預設擁有包訪問許可權,即同一個包內的其他類可以訪問,但對於這個包之外的類則無法訪問

public class CC {
   
	protected int i=5;
	private int k=0;
	public int s=3;
	
	public  static void main(String []args)
	{
		CC cc=new CC();
		System.out.println(new GG().g);
	}
}
class GG{
	int g=0;
}


相關文章