成員內部類、成員靜態內部類
內部類:成員內部類(特例:靜態內部類)、區域性內部類(匿名內部類)
成員內部類:定義在外部類當中
1.定義在外部類當中,和外部類的屬性、方法、構造,處於平等地位。
2.成員內部類擁有獨立的class檔案,其class檔案的名字規則———外部類的類名+$+內部類的類名
3.成員內部類可以使用訪問修飾符,使用後的效果和屬性、方法、構造是一樣的
4.成員內部類內部可以定義各種屬性、構造、方法、初始化塊、甚至可以再定義內部類
5.成員內部類中的屬性和方法不能是static的成員內部類在外部產生物件的語法
1.外部類 外部類變數名 = new 外部類()
外部類.內部類 變數名 = 外部類變數名.new 內部類()
Outer outer = new Outer();
Outer.Inner inner =outer.new Inner();
2.外部類.內部類 變數名 = new 外部類().new 內部類()
Outer.Inner inner = new Outer().new Inner();成員內部類操作外部類的屬性或方法:外部類.this.屬性(或方法)
成員靜態內部類:用static修飾的成員內部類
1.定義在外部類當中,和外部類的屬性、方法、構造,處於平等地位。
2.成員靜態內部類擁有獨立的class檔案,其class檔案的名字規則———外部類的類名+$+內部類的類名
3.成員靜態內部類可以使用訪問修飾符,使用後的效果和屬性、方法、構造是一樣的
4.成員靜態內部類內部可以定義各種屬性、構造、方法、初始化塊、甚至可以再定義內部類
5.成員靜態內部類中的屬性和方法可以是static的,與普通成員內部類不同成員靜態內部類在外部產生物件的語法
1.外部類.內部類 變數名 = new 外部類.內部類()
Outer.Inner inner = new Outer.Inner();
2.無需產生外部類的物件,直接使用外部類類名。內部類類名的方法作為它的型別,new出來即可成員靜態內部類不能操作外部類的非靜態屬性、方法,只能操作外部類中靜態的屬性、方法
1.內部類的應用場景:我們在描述A事物的時候,發現描述的A事物內部還存在另外一個比較複雜的事物B時候,而且這個比較複雜的事物B還需要訪問A事物的屬性等資料,那麼這個時候我們就可以使用內部類來描述B事物
2.內部類的好處:內部類可以直接訪問外部類的所有成員
3.內部類要注意的事項:
a.如果外部類與內部類存在同名的成員變數時,在內部類中預設情況下是訪問內部類的成員變數。
解決方法:外部類.this.成員變數名 來指定訪問外部類的成員。示例:Outer.this.print()
b.私有的成員內部類,只能在外部類提供一個方法建立內部類進行訪問
c.成員內部類一旦出現了靜態成員,那麼該類也必須使用static進行修飾
訪問方式1示例
class Outer {
// 成員內部類
int x = 100;
class Inner {
int i = 10;
public void print() {
System.out.println("這個是成員內部類的print方法!");
}
}
public void instance() {
// 在外部的方法中建立了內部類的物件,然後呼叫物件的方法
Inner inner = new Inner();
inner.print();
System.out.println("x = " + this.x);
}
}
public class Demo12 {
public static void main(String[] args) {
Outer outer = new Outer();
outer.instance();
}
}
訪問方式2示例
class Outer {
// 成員內部類
int x = 100;
class Inner {
int i = 10;
public void print() {
System.out.println("這個是成員內部類的print方法!");
}
}
}
public class Demo12 {
public static void main(String[] args) {
Outer.Inner inner = new Outer().new Inner();
inner.print();
}
}