課程
/后端開(kāi)發(fā)
/Java
/Java入門(mén)第二季
為什么在創(chuàng)建內(nèi)部類對(duì)象之前要先創(chuàng)建外部類對(duì)象,而不能直接用Inner i=HelloWorld.new Inner();
2015-09-17
源自:Java入門(mén)第二季 7-6
正在回答
先說(shuō)=的左邊?
Inner是內(nèi)部類 是有所屬的外部類的你標(biāo)識(shí)出內(nèi)部類所屬的外部類,java不知道去哪里找這個(gè)內(nèi)部類所以=的左邊是 Outer.Inner i?
再說(shuō)=的右邊?
內(nèi)部類你可以看成是外部類的一個(gè)成員,你調(diào)用外部類的成員時(shí)(如方法) 必須先創(chuàng)建外部類的對(duì)象,然后通過(guò)對(duì)象來(lái)調(diào)用,所以你調(diào)用內(nèi)部類也必須有一個(gè)外部類的對(duì)象 所以=的右邊應(yīng)該是new Outer().new Inner()
另外.如果內(nèi)部類是靜態(tài)的
也就相當(dāng)與是靜態(tài)成員,也就就不需要?jiǎng)?chuàng)建外部對(duì)象 ?=的右邊直接 new Outer.Inner()即可
魯文杰 提問(wèn)者
你這里的Inner是一個(gè)靜態(tài)內(nèi)部類吧!你把這個(gè)內(nèi)部類想象成一個(gè)普通的靜態(tài)方法、或者是靜態(tài)屬性,那么你要怎么去調(diào)用這個(gè)方法和屬性?那肯定是類名.方法(或?qū)傩裕罕热鏗elloWorld.print();那么靜態(tài)內(nèi)部類也是一樣,你要聲明它的對(duì)象,得用外部類名去調(diào)用:即HelloWorld.new Inner();
然后前面加上new:new ? ? ? ? ??HelloWorld.new Inner();(不是new HelloWorld ? ? ? ? .new Inner);
你看一下這個(gè)代碼,里面有四種內(nèi)部類對(duì)象的聲明,把他們想成一個(gè)方法,這樣一個(gè)方法該怎么去調(diào)用,那么這個(gè)類就如何去聲明。代碼如下:
package com.briup.pojo;
public class InnerClassTest {
????public void Test(){
?????class LocalInner{ ???????????????????????????????? //局部?jī)?nèi)部類,與局部變量類似,只能在此方法里聲明
????LocalInner li = new LocalInner();????????? ? //聲明局部?jī)?nèi)部類
}
public void getStudent(){
????Adb a = ?new Adb(){ ???????????????????????????? //匿名內(nèi)部類,沒(méi)有名字的內(nèi)部類,定義類時(shí)就同時(shí)聲明了
????????????????????????????????????????????????????????????????? ? //Adb是一個(gè)抽象類,最下面有代碼
????};
public static class StaticInner{????????????//靜態(tài)內(nèi)部類,想象靜態(tài)方法是怎么調(diào)用的
????
class MemberInner{???????????????????????????? //成員內(nèi)部類,你可以把它理解成一個(gè)特殊的屬性
public static void main(String[] args) {
StaticInner s = new ? ? ? ? ? InnerClassTest.StaticInner();????????//聲明靜態(tài)內(nèi)部類
MemberInner m = (new InnerClassTest()).new MemberInner(); ? ?//聲明成員內(nèi)部類
---------------------------
public abstract class Adb{
把內(nèi)部類與處于同樣位置的方法、屬性類比,就知道如何去聲明了。
舉報(bào)
課程升級(jí)!以終為始告別枯燥,在開(kāi)發(fā)和重構(gòu)中體會(huì)Java面向?qū)ο缶幊痰膴W妙
4 回答創(chuàng)建類和創(chuàng)建對(duì)象
2 回答類和創(chuàng)建對(duì)象
1 回答創(chuàng)建類的對(duì)象
2 回答創(chuàng)建內(nèi)部類對(duì)象
5 回答// 創(chuàng)建內(nèi)部類對(duì)象
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2015-09-18
先說(shuō)=的左邊?
Inner是內(nèi)部類 是有所屬的外部類的你標(biāo)識(shí)出內(nèi)部類所屬的外部類,java不知道去哪里找這個(gè)內(nèi)部類所以=的左邊是 Outer.Inner i?
再說(shuō)=的右邊?
內(nèi)部類你可以看成是外部類的一個(gè)成員,你調(diào)用外部類的成員時(shí)(如方法) 必須先創(chuàng)建外部類的對(duì)象,然后通過(guò)對(duì)象來(lái)調(diào)用,所以你調(diào)用內(nèi)部類也必須有一個(gè)外部類的對(duì)象 所以=的右邊應(yīng)該是new Outer().new Inner()
另外.如果內(nèi)部類是靜態(tài)的
也就相當(dāng)與是靜態(tài)成員,也就就不需要?jiǎng)?chuàng)建外部對(duì)象 ?=的右邊直接 new Outer.Inner()即可
2015-09-17
你這里的Inner是一個(gè)靜態(tài)內(nèi)部類吧!你把這個(gè)內(nèi)部類想象成一個(gè)普通的靜態(tài)方法、或者是靜態(tài)屬性,那么你要怎么去調(diào)用這個(gè)方法和屬性?那肯定是類名.方法(或?qū)傩裕罕热鏗elloWorld.print();那么靜態(tài)內(nèi)部類也是一樣,你要聲明它的對(duì)象,得用外部類名去調(diào)用:即HelloWorld.new Inner();
然后前面加上new:new ? ? ? ? ??HelloWorld.new Inner();(不是new HelloWorld ? ? ? ? .new Inner);
你看一下這個(gè)代碼,里面有四種內(nèi)部類對(duì)象的聲明,把他們想成一個(gè)方法,這樣一個(gè)方法該怎么去調(diào)用,那么這個(gè)類就如何去聲明。代碼如下:
package com.briup.pojo;
public class InnerClassTest {
????public void Test(){
?????class LocalInner{ ???????????????????????????????? //局部?jī)?nèi)部類,與局部變量類似,只能在此方法里聲明
????LocalInner li = new LocalInner();????????? ? //聲明局部?jī)?nèi)部類
}
}
public void getStudent(){
????Adb a = ?new Adb(){ ???????????????????????????? //匿名內(nèi)部類,沒(méi)有名字的內(nèi)部類,定義類時(shí)就同時(shí)聲明了
????????????????????????????????????????????????????????????????? ? //Adb是一個(gè)抽象類,最下面有代碼
????};
}
public static class StaticInner{????????????//靜態(tài)內(nèi)部類,想象靜態(tài)方法是怎么調(diào)用的
????
}
}
class MemberInner{???????????????????????????? //成員內(nèi)部類,你可以把它理解成一個(gè)特殊的屬性
}
}
public static void main(String[] args) {
StaticInner s = new ? ? ? ? ? InnerClassTest.StaticInner();????????//聲明靜態(tài)內(nèi)部類
MemberInner m = (new InnerClassTest()).new MemberInner(); ? ?//聲明成員內(nèi)部類
}
}
---------------------------
package com.briup.pojo;
public abstract class Adb{
}
把內(nèi)部類與處于同樣位置的方法、屬性類比,就知道如何去聲明了。