標籤:靜態 一點 class def this 實現 更改 nal public
===靜態內部類,和靜態成員變數一致不需要依賴外部類,不能夠使用外部類的非static成員變數和方法,因為不依賴於對象。 ===成員內部類:可以有四種存取權限---private,default,protected,public就像一個成員變數一樣內部類訪問外部類的成員變數和方法(出現和內部類的成員變數和方法重名的情況的時候)外部類.this.成員變數外部類.this.成員方法外部類訪問內部類的成員變數和方法的時候必須先建立成員內部類的對象,再通過指向這個對象的引用來進行訪問兩種方式:1.建立外部類後再建立內部類;2.使用外部類的方法來建立。 Outter outter = new Outter(); Outter.Inner inner = outter.new Inner(); //必須通過Outter對象來建立 //第二種方式: Outter.Inner inner1 = outter.getInnerInstance(); ===局部內部類,定義在方法內部或者一個範圍內部,存取權限就是方法內或者該範圍內。 注意,局部內部類就像是方法裡面的一個局部變數一樣,是不能有public、protected、private以及static修飾符的。 public People getWoman(){ class Woman extends People{ //局部內部類 int age =0; } return new Woman(); } ===匿名內部類,使用一次來簡化編程,必須實現一個介面或者父類,主要就是用來建立一個對象然後使用。http://blog.csdn.net/qq_25827845/article/details/52598319繼承介面的方式來實現。繼承父類的方式來實現。建立線程的方式也是使用匿名內部類,而且是使用了繼承介面的方式來建立。new InnerClass{}的方式來建立new Thread(new Runnable{}).start(); 深入理解內部類:1.為什麼成員內部類能夠訪問外部類的成員變數和方法呢?因為編譯器在編譯的時候預設會編譯成兩個.class檔案,內部類會有一個指向外部類對象的引用。 2.局部內部類和匿名內部類在編譯的時候怎麼取名字呢?局部內部類和匿名內部類只能夠在方法內和範圍內進行使用,為什麼只能訪問的是final修飾的局部變數?首先匿名內部類使用的變數值是對方法局部變數值的拷貝,拷貝的這個變數放入到常量池裡面了,和方法棧中的變數相互獨立的。使用final進行修飾的話,這個變數就無法被更改,也就不會出現資料不一致的情況。不用final修飾的話編譯都通不過。 public void test(final int b) { final int a = 10; new Thread(){ public void run() { System.out.println(a); System.out.println(b); }; }.start(); } 3.static靜態內部類有外部類對象的引用嗎?沒有,因為和外部類對象無關,所以不存在對象引用。 為什麼在Java中需要內部類?總結一下主要有以下四點: 1.每個內部類都能獨立的繼承一個介面的實現,所以無論外部類是否已經繼承了某個(介面的)實現,對於內部類都沒有影響。內部類使得多繼承的解決方案變得完整,豐富了java繼承的方式,除了繼承介面和類,還能夠使用匿名繼承的方式,更加靈活。 2.方便將存在一定邏輯關係的類組織在一起,又可以對外界隱藏。 3.方便編寫事件驅動程式 4.方便編寫線程代碼 個人覺得第一點是最重要的原因之一,內部類的存在使得Java的多繼承機制變得更加完善。
java基礎---內部類