java內部類詳解

2021-07-27 12:07:15 字數 2318 閱讀 2913

成員內部類:作為外部類的乙個成員存在,與外部類的屬性、方法並列。

成員內部類中,不能定義靜態成員

成員內部類中,可以訪問外部類的所有成員

在內部類中訪問內部類自己的變數直接用變數名

在內部類中訪問內部類自己的變數也可以用this.變數名

在內部類中訪問外部類中與內部類同名的例項變數用外部類名.this.變數名

如果內部類中沒有與外部類同名的變數,則可以直接用變數名訪問外部類變數

// 注意:內部類是乙個編譯時的概念,一旦編譯成功,就會成為完全不同的兩類。

// 對於乙個名為outer的外部類和其內部定義的名為inner的內部類。編譯完成後出現outer.class和outer$inner.class兩類。

public class outer 

public static void main(string args)

}

區域性內部類:在方法中定義的內部類稱為區域性內部類。與區域性變數類似,區域性內部類不能有訪問說明符,因為它不是外圍類的一部分,但是它可以訪問當前**塊內的常量,和此外圍類所有的成員。

可以定義與外部類同名的變數

不可以定義靜態變數

如果內部類沒有與外部類同名的變數,在內部類中可以直接訪問外部類的例項變數

可以訪問外部類的區域性變數(即方法內的變數),但是變數必須是final的

如果內部類中有與外部類同名的變數,直接用變數名訪問的是內部類的變數

用this.變數名訪問的也是內部類變數

用外部類名.this.內部類變數名訪問的是外部類變數

訪問區域性內部類必須先有外部類物件

public class outer 

new inner();

} public static void main(string args)

}

如果你不需要內部類物件與其外圍類物件之間有聯絡,那你可以將內部類宣告為static。

這通常稱為巢狀類(nested class)。

想要理解static應用於內部類時的含義,你就必須記住,普通的內部類物件隱含地儲存了乙個引用,指向建立它的外圍類物件。

然而,當內部類是static的時,就不是這樣了。巢狀類意味著:

1. 要建立巢狀類的物件,並不需要其外圍類的物件。

2. 不能從巢狀類的物件中訪問非靜態的外圍類物件。

靜態內部類可以用public,protected,private修飾

靜態內部類中可以定義靜態或者非靜態的成員

靜態內部類只能訪問外部類的靜態成員(包括靜態變數和靜態方法)

靜態內部類不能訪問外部類的非靜態成員(包括非靜態變數和非靜態方法)

外部類訪問內部類的靜態成員:內部類.靜態成員

外部類訪問內部類的非靜態成員:例項化內部類即可

生成乙個靜態內部類不需要外部類成員:這是靜態內部類和成員內部類的區別。

靜態內部類的物件可以直接生成:

outer.inner in = new outer.inner();而不需要通過生成外部類物件來生成。

eg:成員內部類

outer out = new outer();

outer.inner outin = out.new inner();

這樣實際上使靜態內部類成為了乙個頂級類(正常情況下,你不能在介面內部放置任何**,

但巢狀類可以作為介面的一部分,

因為它是static 的。只是將巢狀類置於介面的命名空間內,這並不違反介面的規則)

public class outer 

void inner_f2()

} public void outer_f3()

public static void main(string args)

}

匿名內部類:就是沒有名字的內部類。

什麼情況下需要使用匿名內部類?如果滿足下面的一些條件,使用匿名內部類是比較合適的:

·只用到類的乙個例項。

·類在定義後馬上用到。

·類非常小(sun推薦是在4行**以下)

·給類命名並不會導致你的**更容易被理解。

在使用匿名內部類時,要記住以下幾個原則:

·匿名內部類不能有構造方法。

·匿名內部類不能定義任何靜態成員、方法和類。

·匿名內部類不能是public,protected,private,static。

·只能建立匿名內部類的乙個例項。

·乙個匿名內部類一定是在new的後面,用其隱含實現乙個介面或實現乙個類。

·因匿名內部類為區域性內部類,所以區域性內部類的所有限制都對其生效。

java內部類詳解

內部類是一種類的結構擴充,讓乙個類的內部除了屬性與方法之外還可以存在有其它類的結構,並且內部類也可以定義在方法或 塊中,但是從開發的角度來講,要盡量避免使用內部類,優先考慮普通類。乙個內部類的例子 class outer public void fun public class testdemo 那...

Java內部類詳解(三)

首先,靜態內部類實際上與普通類 即類名必須與檔名一樣的頂級類 一樣,只是靜態內部類在某一類的內部定義了而已,既然是類,要想使用就必須例項化。概念上與靜態變數 靜態方法是不一樣的,不要被 靜態 兩個字迷惑了 不要以為凡是靜態的東西就不需要例項化就可以直接使用,靜態內部類是有區別 而且只有靜態內部類,而...

java基礎 內部類詳解

內部類 成員內部類 非靜態的 區域性內部類 匿名內部類 靜態內部類。員內部類 作為外部類的成員存在,與成員變數和成員方法平級關係 宣告 public class out 成員變數 成員方法 成員內部類 訪問許可權 class in 成員變數 成員方法 語法說明 成員內部類的訪問許可權 任意的 思考如...