特點
內部類可以訪問外部類的所有作用域。
內部類可以對同乙個包的其他類隱藏起來。
當外部類的物件建立乙個內部類物件時,此內部類物件必定會捕捉乙個指向外部類物件的引用。
內部類的物件只能在與外部類的物件相關聯的情況下才能被建立(內部類是非static時),即必須存在外部類的物件。
在外部類的非靜態方法以外的地方,需要用outer.inner類指明物件型別。
在外部類的非靜態方法內,直接用inner類指明物件型別。
在外部類的靜態方法內和其他類中,必須先例項化乙個外部類物件,然後使用outer.inner in = out.new inner();類似的格式才能例項化乙個內部類物件。
如果內部類是巢狀類(static類),則不需要對外部類的物件的引用,即不需要先例項化外部類物件。
publicclass
outer
//外部類非靜態方法中直接inner in = new inner()就可以例項化內部類物件
//外部類非靜態方法以外的地方,使用outer.inner in = new outer.inner();
public
void
print()
//返回乙個指向內部類物件的引用
public inner getinner(int i1,int
i2)
private
class
inner
public
void
print()
}}
當內部類是private時,在其他類中通過out.new inner()也無法建立內部類的物件。如下:
publicclass
test
}
在方法中定義的類,不能設定為public或private,因為該類對方法以外的範圍完全是隱藏的。區域性類可以訪問它的外部類的作用域。
只要乙個類是抽象的或是乙個介面,那麼其子類中的方法都可以使用匿名內部類來實現
抽象類的方法實現
abstractclass
person
public
class
demo
};p.eat();
}}
在介面上使用匿名內部類
inte***ceperson
public
class
demo
};p.eat();
}}
由上面的例子可以看出,只要乙個類是抽象的或是乙個介面,那麼其子類中的方法都可以使用匿名內部類來實現
最常用的情況就是在多執行緒的實現上,因為要實現多執行緒必須繼承thread類或是繼承runnable介面
thread類的匿名內部類實現
publicclass
demo }};
t.start();
}}
runnable介面的匿名內部類實現
publicclass
demo }};
thread t = new
thread(r);
t.start();
}}
非靜態內部類是附屬在外部類物件上的,需要先例項化乙個外部類的物件,通過外部類物件才能例項化非靜態內部類;而靜態內部類可以看做是直接附屬在外部類上的,這個靜態代表附屬體是外部類,而不是外部類例項;
publicclass
outer
public
static
class
inner
}}
內部類 成員內部類 區域性內部類 匿名內部類
public class 外部類 private int num 0 外部類如果要訪問內部類的成員,則需要通過內部類的物件訪問 使用方式 1.外部類使用內部類,主函式再使用外部類 2.通過new的方式 外部類.內部類 物件名 new 外部類 new 內部類 定義在方法內部的類,就是區域性內部類,只有...
內部類(成員內部類 靜態內部類 方法內部類)
一 成員內部類 最常見的內部類就是成員內部類,也稱作普通內部類 2 inner類中定義的test 方法可以訪問outer類中的資料,不受訪問控制符的影響。3 定義了成員內部類後,必須使用外部類物件來建立內部類物件,而不能直接去 new 乙個內部類物件,即 內部類 物件名 外部類物件.new 內部類 ...
Java物件導向筆記 十四 內部類
一 內部類訪問規則 內部類可以直接訪問外部類中的成員,包括私有的。之所以可以直接訪問外部類中的成員,是因為內部類中持有乙個外部類的引用即 外部類名.this 外部類要訪問內部類,必須建立內部類物件 二 訪問格式 當內部類定義在外部類的成員位置上,而且非私有,可以在外部其他類中直接建立內部類物件 格式...