class Outter {
private Inner inner = null;
public Outter() {
}
public Inner getInnerInstance() { //其他類獲取內(nèi)部類的方法
if(inner == null)
inner = new Inner();
return inner;
}
class Inner { //普通內(nèi)部類
public Inner() {
}
}
static class Inter { //靜態(tài)內(nèi)部類
}
public static void main(String[] args) {
//在內(nèi)部類所在的外部類中,可以直接創(chuàng)建對象隶垮,不需要外部類(靜態(tài)內(nèi)部類在加載時(shí)已經(jīng)存在)
Inter inter = new Inter();
Outter.Inter i = new Outter.Inter(); //這樣也可以
Outter outter = new Outter();
Inner inner = outter.new Inner(); //非靜態(tài)內(nèi)部類的創(chuàng)建始終需要外部類對象
}
}
public class Test {
public static void main(String[] args) {
//創(chuàng)建普通內(nèi)部類的對象方法一(直接通過外部類對象創(chuàng)建內(nèi)部類)
Outter outter = new Outter();
Outter.Inner inner = outter.new Inner();
//創(chuàng)建普通內(nèi)部類的對象方法二(通過外部類方法獲取內(nèi)部類對象)
Outter.Inner inner1 = outter.getInnerInstance();
//靜態(tài)內(nèi)部類的創(chuàng)建(在內(nèi)部類所在的外部類中創(chuàng)建靜態(tài)內(nèi)部類的對象可以不需要外部類對象)
//但如果在其他類中創(chuàng)建靜態(tài)內(nèi)部類的對象的話,就要參考以下方法
Outter.Inter i = new Outter.Inter();
}
}
以上就是普通內(nèi)部類和靜內(nèi)部類的創(chuàng)建對象方法秘噪±晖蹋可以看出非靜態(tài)內(nèi)部類對象的創(chuàng)建,始終需要先創(chuàng)建所在外部類的對象指煎。而非靜態(tài)內(nèi)部類對象的創(chuàng)建蹋偏,在所在的外部類中則可以不創(chuàng)建該外部類對象。
要區(qū)別于
//普通內(nèi)部類需要外部類對象創(chuàng)建好了至壤,才能訪問到內(nèi)部類
Outter outter = new Outter();
Outter.Inner inner = outter.new Inner();
//靜態(tài)內(nèi)部類在該類加載時(shí)就可以訪問了
Outter.Inter i = new Outter.Inter();
內(nèi)部類在開發(fā)中用的很多威始,常用于GUI界面監(jiān)聽器的綁定,因?yàn)樽鳛閮?nèi)部類的監(jiān)聽器類像街,可以訪問界面的所有成員組件(包括private的組件)黎棠。