四種內部類,(Inner Class)

2021-07-27 18:22:52 字數 2311 閱讀 4027

內部類: 定義在內部的類,不一定非得是定義在類的內部, 可以分為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...