首頁 > 專家說

什么是內部類?Static Nested Class 和 Inner Class的不同a

來源:新能源網
時間:2024-08-17 13:31:10
熱度:

什么是內部類?Static Nested Class 和 Inner Class的不同a【專家解說】:內部類就是在一個類的內部定義的類,內部類中不能定義靜態(tài)成員(靜態(tài)成員不是對象的

【專家解說】:內部類就是在一個類的內部定義的類,內部類中不能定義靜態(tài)成員(靜態(tài)成員不是對象的特性,只是為了找一個容身之處,所以需要放到一個類中而已,這么一點小事,你還要把它放到類內部的一個類中,過分了啊!提供內部類,不是為讓你干這種事情,無聊,不讓你干。我想可能是既然靜態(tài)成員類似c語言的全局變量,而內部類通常是用于創(chuàng)建內部對象用的,所以,把“全局變量”放在內部類中就是毫無意義的事情,既然是毫無意義的事情,就應該被禁止),內部類可以直接訪問外部類中的成員變量,內部類可以定義在外部類的方法外面,也可以定義在外部類的方法體中,如下所示: public class Outer { int out_x = 0; public void method() { Inner1 inner1 = new Inner1(); public class Inner2 //在方法體內部定義的內部類 { public method() { out_x = 3; } } Inner2 inner2 = new Inner2(); } public class Inner1 //在方法體外面定義的內部類 { } } 在方法體外面定義的內部類的訪問類型可以是public,protecte,默認的,private等4種類型,這就好像類中定義的成員變量有4種訪問類型一樣,它們決定這個內部類的定義對其他類是否可見;對于這種情況,我們也可以在外面創(chuàng)建內部類的實例對象,創(chuàng)建內部類的實例對象時,一定要先創(chuàng)建外部類的實例對象,然后用這個外部類的實例對象去創(chuàng)建內部類的實例對象,代碼如下: Outer outer = new Outer(); Outer.Inner1 inner1 = outer.new Innner1(); 在方法內部定義的內部類前面不能有訪問類型修飾符,就好像方法中定義的局部變量一樣,但這種內部類的前面可以使用final或abstract修飾符。這種內部類對其他類是不可見的其他類無法引用這種內部類,但是這種內部類創(chuàng)建的實例對象可以傳遞給其他類訪問。這種內部類必須是先定義,后使用,即內部類的定義代碼必須出現(xiàn)在使用該類之前,這與方法中的局部變量必須先定義后使用的道理也是一樣的。這種內部類可以訪問方法體中的局部變量,但是,該局部變量前必須加final修飾符。 對于這些細節(jié),只要在eclipse寫代碼試試,根據(jù)開發(fā)工具提示的各類錯誤信息就可以馬上了解到。 在方法體內部還可以采用如下語法來創(chuàng)建一種匿名內部類,即定義某一接口或類的子類的同時,還創(chuàng)建了該子類的實例對象,無需為該子類定義名稱: public class Outer { public void start() { new Thread( new Runable(){ public void run(){}; } ).start(); } } 最后,在方法外部定義的內部類前面可以加上static關鍵字,從而成為Static Nested Class,它不再具有內部類的特性,所有,從狹義上講,它不是內部類。Static Nested Class與普通類在運行時的行為和功能上沒有什么區(qū)別,只是在編程引用時的語法上有一些差別,它可以定義成public、protected、默認的、private等多種類型,而普通類只能定義成public和默認的這兩種類型。在外面引用Static Nested Class類的名稱為“外部類名.內部類名”。在外面不需要創(chuàng)建外部類的實例對象,就可以直接創(chuàng)建Static Nested Class,例如,假設Inner是定義在Outer類中的Static Nested Class,那么可以使用如下語句創(chuàng)建Inner類: Outer.Inner inner = new Outer.Inner(); 由于static Nested Class不依賴于外部類的實例對象,所以,static Nested Class能訪問外部類的非static成員變量。當在外部類中訪問Static Nested Class時,可以直接使用Static Nested Class的名字,而不需要加上外部類的名字了,在Static Nested Class中也可以直接引用外部類的static的成員變量,不需要加上外部類的名字。 在靜態(tài)方法中定義的內部類也是Static Nested Class,這時候不能在類前面加static關鍵字,靜態(tài)方法中的Static Nested Class與普通方法中的內部類的應用方式很相似,它除了可以直接訪問外部類中的static的成員變量,還可以訪問靜態(tài)方法中的局部變量,但是,該局部變量前必須加final修飾符。
  1. “綠色、環(huán)保、低碳”是當今世界的關鍵詞,“低碳”要求我...
    2024-08-17
  2. 【關鍵詞】:磁性材料、順磁性、抗磁性、磁疇、鐵磁性、反鐵磁性、亞鐵磁性、永磁材料
    2024-08-17
  3. 【關鍵詞】:磁性材料、順磁性、抗磁性、磁疇、鐵磁性、反鐵磁性、亞鐵磁性、永磁材料
    2024-08-17
  4. 【關鍵詞】:磁性材料、順磁性、抗磁性、磁疇、鐵磁性、反鐵磁性、亞鐵磁性、永磁材料
    2024-08-17
  5. 【關鍵詞】:磁性材料、順磁性、抗磁性、磁疇、鐵磁性、反鐵磁性、亞鐵磁性、永磁材料
    2024-08-17
  6. 【關鍵詞】:磁性材料、順磁性、抗磁性、磁疇、鐵磁性、反鐵磁性、亞鐵磁性、永磁材料
    2024-08-17
  7. 工裝-工服-職業(yè)裝-制服怎么搜索這幾個關鍵詞,就能搜出朗杰瑞服裝公司呢?
    2024-08-17
  8. 朗杰瑞制服 北京制服 北京職業(yè)裝 工服 工裝?我選哪個關鍵詞好呢?
    2024-08-17
  9. 評析中國改革開放30年的經驗與教訓的論文 要求3000字左右,有摘要,有關鍵詞
    2024-08-17
  10. 狗狗衣服包著腳,四個腳都套在衣服里,不用穿鞋的那種衣服叫什么?淘寶搜什么關鍵詞?
    2024-08-17
  11. 來個淘寶厲害的推廣幫我解決下問題,謝謝,么么噠 ,用什么軟件優(yōu)化關鍵詞比較好?
    2024-08-17
  12. 在SQL語言中,用于排序的命令是()。A. SORT BY AND OF B. ORDER BY C. SELECT D. WHERE查詢中分組的關鍵詞是()。A. ORDER BYB. LI
    2024-08-17
  13. 在網上看了很多網站推廣的方法技巧的相關資料,新手站長如何做旅游關鍵詞優(yōu)化?
    2024-08-17
  14. "普通攻擊對中型裝甲造成額外傷害, 但對加強型盔甲的傷害會折損",這句話中有涉及兩個關鍵詞
    2024-08-17
  15. 求一篇中秋節(jié)英語作文?。。?!急?。。。?!明天老師就讓交,請加上以下關鍵詞:
    2024-08-17