內部類和外部類的呼叫
阿新 • • 發佈:2018-12-26
//外部類 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 方法內部類()