關(guān)于實(shí)例中創(chuàng)建非靜態(tài)內(nèi)部類對(duì)象的問(wèn)題
示例代碼中創(chuàng)建非靜態(tài)內(nèi)部類的對(duì)象是這樣創(chuàng)建的
Outer?o=new?Outer(); Inner?i=o.new?Inner();
這里怎么能夠直接使用Inner i聲明,難道不應(yīng)該是
Outer?o=new?Outer(); o.Inner?i=o.new?Inner();
這樣才對(duì)嗎?main是一個(gè)靜態(tài)方法怎么能夠直接訪問(wèn)非靜態(tài)成員內(nèi)部類?
2015-11-23
因?yàn)槭窃诒绢惖膍ain方法中創(chuàng)建的內(nèi)部類對(duì)象所以示例中省略了一點(diǎn)東西 有點(diǎn)誤導(dǎo)性
如果是單獨(dú)開個(gè)測(cè)試類中來(lái)創(chuàng)建非靜態(tài)的內(nèi)部類的對(duì)象應(yīng)該是這樣
Outer o=new Outer();
Outer.Inner in=o.new Inner();
也可以結(jié)合起來(lái)直接這樣寫
Outer.Inner in = new Outer().new Inner();
單獨(dú)說(shuō)一下 這里這樣寫Outer.Inner in=o.new Inner();用的Outer.Inner 而不是o.Inner的原因是內(nèi)部類其實(shí)也是一個(gè)類文件 只不過(guò)內(nèi)部類的文件名 其實(shí)是外部類.內(nèi)部類.class
所以你在創(chuàng)建他對(duì)象的時(shí)候得寫出他的類名全稱即Outer.Inner