內部類: 定義在內部的類,不一定非得是定義在類的內部, 可以分為4種型別。
第一: 靜態內部類(定義在類中)
靜態的內部類與其外部類是編譯成兩個.class檔案的,注意的是外部類是不可以定義為靜態的。
為什麼外部的類不可以定義為靜態的
解釋:靜態類是沒有實際意義的,而且執行初始化還要占用大量記憶體,而且假如有靜態類,不能被重寫,不能建立物件,沒啥實際意義。
備註:其實只需要定義靜態變數、靜態方法、靜態內部類等完全可以滿足需求的。
只能訪問外部類的靜態成員變數與靜態方法,
為什麼靜態的只能訪問靜態的?
解釋: 靜態的變數或者方法是在類被載入的時候被構造的,而非靜態的則是在生成物件的時候建立的,當在靜態裡面呼叫非靜態的時候,可能非靜態的還沒有沒建立,會發生非法訪問。所以靜態的只能訪問靜態的。
生成靜態內部類物件的方式為:
outerclass.innerclass inner = new outerclass.innerclass();
// b是a的靜態內部類
public
class a
}
第二: 成員內部類(內部的非靜態的類)(定義在類中)
1. 可以訪問外部類的靜態與非靜態的方法與成員變數。
2. 生成成員內部類物件的方式為: (和靜態內部類是不同的)
outerclass.innerclass inner = new outerclass().new innerclass();
為啥這樣寫:
因為是非靜態的類,可以模擬成非靜態的乙個成員方法,必須通過乙個例項化的物件來呼叫,而靜態的內部類可以直接通過類名來呼叫,所以靜態的內部類可以直接通過 外部類名.內部類名 呼叫 ; 而成員內部類必須通過 new 外部類().內部類() 呼叫。 通過外部類的乙個物件來呼叫內部類
也是生成兩個.class 檔案
若想在區域性內部類中訪問外部類的成員變數,語法 outerclass.this.a;
// b是a的成員內部類, 與靜態內部類的區別是有無static關鍵字
public
class a
}}
第三: 區域性內部類(定義在方法中的)用的比較少
類似於乙個區域性變數,不能定義成 public private,protected 訪問修飾符的變數, 原因是區域性變數前面不能帶有訪問修飾符,訪問修飾符只能修飾成員變數。
我們是沒有辦法在外部類中使用的,只能在其所定義的成員方法內使用。
區域性內部類中是不能訪問外部類的成員或者方法的,只能訪問方法中宣告的 final型別的變數
第四: 匿名內部類 (anonymous inner class )
內部類,但是沒有名字沒有名字就意味著沒有構造方法, 是一種特殊的區域性內部類。
匿名內部類會隱式地繼承乙個父類或實現乙個介面。最重要的特點
// 乙個測試類
public
class anonymousinnerclass
public
static
void
main(string args) 就是定義了乙個內部類,
// 這個內部類繼承了 date 這個類,但是沒有重寫 date類中的任何方法
// 然後傳給 gettime方法中的物件是乙個繼承了date類的子類的物件
// 可以看生成的.class 檔案,會多了乙個,而且內部類因為沒有名字,所以就 $num 以數字的方式表示了內部類
string strinner = annoymousclass.gettime(new date() );
system.out.println(str);
system.out.println(strinner);
}}
通常也是用在方法內的,一般作為引數傳遞進去
swing 使用匿名內部類實現了監聽介面,為乙個事件新增乙個***,適用於 該內部類實現的功能只會被使用一次,或者被乙個物件使用的情況,不必要再為其單獨的寫乙個類。
public
static
void
main ()
})}
四種內部類簡單介紹(inner class)
1.靜態內部類 static inner class 只能訪問外部類的靜態成員變數和靜態方法,生成靜態內部類的方式為 staticinner.inner inner new staticinner.inner 2.成員內部類 member inner class a 可以當做成員變數來看待理解,可以...
Java四種內部類
參考 四種內部類 常規內部類 靜態內部類 區域性內部類 匿名內部類 1 常規內部類 常規內部類沒有用static修飾且定義在外部類類體中,常規內部類可以理解為類中普通的成員變數 1 常規內部類可以訪問外部類的private成員變數和方法 2 如果要訪問內部類,首先要例項化外部類outer,然後呼叫i...
java四種內部類詳解
一般來說,有4中內部類 常規內部類 靜態內部類 區域性內部類 匿名內部類。一.常規內部類 常規內部類沒有用static修飾且定義在在外部類類體中。1.常規內部類中的方法可以直接使用外部類的例項變數和例項方法。2.在常規內部類中可以直接用內部類建立物件 3.如下 public class myoute...