JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 Inner Class 介紹 [Re:swanky]
swanky

暴走熊

版主

發文: 461
積分: 9
於 2003-08-21 08:23 user profilesend a private message to usersend email to swankyreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
轉錄自java連線版

作者: TAHO (癡人) 看板: java
標題: Re: 閒聊 -- 名稱,參考,和物件 part II
時間: Mon Dec 24 12:25:06 2001

※ 引述《compuwong@yahoo.com (compuwong)》之銘言:
> taho, 可否說說inner class 呢?例如有什麼作用,四種inner class 又有何分別
> ......thx ar..^^..因為我還是分不清何時用 那種inner class 好..

inner class 分為四種
如果不要太在意 "class" 這個字眼的話
可以很清楚的發現 他跟 field method 或是 local 變數 的地位是一樣的
就跟變數(物件)宣告的情況分為四種是一樣的意思

1
2
3
4
5
6
7
8
9
10
public class Test
{
    public static String fieldA;
    public String fieldB;
 
    public static void methodA() { ... }
    public void methodB() { ... }
 
    ...
}


上面的例子 fieldA fieldB methodA methodB 都是 類別 Test 的成員
同理 我們也可以加上 class 的成員

1
2
    public static class ClassA{ ... }
    public class ClassB{ ... }


同樣的 ClassA 是跟類別相關 而 ClassB 是跟物件相關
前者是 靜態內部類別 ( 對比於 靜態欄位 )
後者是 成員類別 ( 對比於 成員欄位 )
其用法與地位可以比照 fieldA 跟 fieldB

同樣的 我們可以在 method 中 或是 static block 中
像在宣告 區域變數 一樣的宣告 類別

1
2
3
4
5
6
7
public void method()
{
    public String varC;
    public class ClassC{ ... }
 
    ...
}


或是

1
2
3
4
5
public void method()
{
    methodD( new Date() );
    methodD( new ClassD(){ ... } );
}


看起來是不是很像呢?
前者就是 區域類別 ( 對比於 區域變數 )
後者為 匿名類別 ( 就像沒有變數名稱的物件 )

至於使用的時機 就跟你為甚麼要宣告 field 或是 區域變數 一樣囉
如果內部類別 是直接跟外層類別相關 在 JVM 中只維持一份 class 物件
那就是 靜態內部類別 (static field)
如果內部類別 是跟外層類別的 "物件" 相關
每個外層類別的物件 都維持一份內部類別的 class 物件
那就是 成員類別 ( non-static field)
如果這內部類別的視野只需在某一 method 的敘述過程中出現
那就需要使用 區域類別 ( 區域變數 )
如果內部類別只需在某一 method 中出現一次
那可以只用 匿名類別 ( 匿名物件 )

當然這些內部類別的使用上有一些規範和限制
寫程式時要特別去注意一下就是了

PS: 內部類別應該是為了讓寫程式更輕鬆方便而設計的
除非有特殊需求 否則不需要強迫自己把程式寫成內部類別的樣子吧
就算是 awt 或是 swing 程式中大量使用的 匿名類別
如果寫成一般類別 還是可以執行的很好啊


reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
23180 [精華] 閒聊 -- 名稱,參考,和物件 swanky 2672 2003-08-21 08:15
21875 閒聊 -- 名稱,參考,和物件 part II swanky 1567 2003-08-21 08:18
23365 Inner Class 介紹 swanky 1650 2003-08-21 08:23
21965 Re:閒聊 -- 名稱,參考,和物件 item1394 644 2003-10-07 20:41
21432 Re:閒聊 -- 名稱,參考,和物件 TAHO 904 2004-01-07 05:28
19029 Re:閒聊 -- 名稱,參考,和物件 java_sai 259 2004-10-23 18:13
» JWorld@TW »  Java 新手區

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8