1. 程式人生 > >內部類和外部類的呼叫

內部類和外部類的呼叫

//外部類
public class Out{
    private int yes = 0;
    int data = 1 ;
	//內部類
	public class In{
		int yes = 2 ;
		public void print() { 
			System.out.println("外部類yes:" + Out.this.yes );//呼叫外部類和內部類同名變數或屬性的方法
			System.out.println("外部類中data:" + data);  //呼叫外部變數
			System.out.println("內部類中yes:" +  yes );
			
		}
	}
    

	public static void main(String[] args) {
        
        //建立外部類的物件,利用外部類物件建立內部類物件,呼叫內部類物件的方法
		//第一種呼叫方式
		Out outObject = new Out(); 
		In inMethod1 =   outObject.new In()  ;
		inMethod1.print(); 
		//第二種呼叫方式
		Out.In inMethod2= new Out().new In() ;
		inMethod2.print();	
	}
}


輸出:

外部類yes:0

外部類中data:1

內部類中yes:2

外部類yes:0

外部類中data:1

內部類中yes:2


tips:

1. 定義內部類後,須用外部類物件來建立內部類物件,而不能是:內部類 物件名 = new 內部類( );,只能先建立外部類物件再 通過外部類物件引用內部類的方法、屬性等:

內部類 物件名 = 外部類物件.new 內部類( ) ;

或   外部類.內部類 物件名 = new 外部類().new 內部類();

即訪問成員內部類的唯一途徑就是通過外部類的物件!

2.內部類內不允許有任何靜態宣告!

3.如果外部類和內部類具有相同的成員變數或方法,內部類成員變數或方法具有更高的優先順序,如果要訪問外部類的成員變數可以使用關鍵字this 

4.內部類可以看做外部類的一個成員變數的位置,內部類可以使用任意訪問控制符,如 public 、private 等

5. 內部類可以直接訪問外部類中的資料,而不受訪問控制符的影響

6.內部類也是獨立的類,在編譯過程中會產生獨立的.class檔案,但其命名方式為:外部類名$內部類名.class(普通類:類名.class)

7.靜態內部類不能直接訪問外部類的非靜態成員,而是通過 new外部類().成員 訪問 ; 訪問同名外部類靜態成員通過 類名.靜態成員  

8.定義在外部類的方法中的類稱為方法內部類,方法內部類只在該方法內有效,且方法內部類不能有訪問控制符和static修飾,在方法內引用直接用 方法內部類 物件名 = new 方法內部類()