iT邦幫忙

2022 iThome 鐵人賽

DAY 29
0
Software Development

Java入門的30張門票系列 第 29

[Day29] 內部類別 inner class

  • 分享至 

  • xImage
  •  

寫Java程式就是在設計類別,而這些類別定義都是寫在.java檔案中,當然也可以把很多個類別寫在同一個檔案中。像是下面這樣,這兩個.class檔都是屬於外部類別(outer class)

class Dad{
    // code
}
class Son{
    // code
}

Java 1.1之後,除了之前講過的一般類別和介面之外,還額外定義了四種內部類別,除了第一種其他都是非static的。

  1. 靜態內部類別(static inner class)
  2. 成員內部類別(member inner class)
  3. 區域內部類別(local inner class)
  4. 匿名內部類別(anonymous inner class)
class Dad{
    String dadName;
    Public Dad(String str){
        dadName = str;
    }
    class Son{
        String name;
    }
}

如果要宣告內部類別可以用,跟以前宣告物件一樣,只是利用點運算子從外部類別.進内部類別。指定運算子後面,外部物件.new 內部類別建構子()。想要初始化物件,就要告訴它是哪個物件裡面的內部類別,然後一樣呼叫建構子。

// 外部類別.內部類別 物件名稱 = 外部物件.new 建構子();
Dad papa = new Dad("小明");
Dad.Son name = papa.new Son();

那使用內部類別有什麼好處呢?
第一,這樣就可以直接存取外部類別的私有(private)成員,像是在視窗程式中,可以用內部類別來實作一個事件傾聽者類別(Listener),這個視窗傾聽者類別可以直接存取視窗元件,就不用透過參數來傳遞。第二,當某個Slave類別指完全服務於一個Master類別時,可以把它設成內部類別,這樣在使用Master的人就不用知道Slave的存在。

有這種設計就是為了防止別人亂用你的類別外,還可以確保內部的資料備正確的使用。就跟之前提到過的封裝一樣,可以保護程式的安全性、完整性。


上一篇
[Day28] Java的系統屬性
下一篇
[Day30] 為30天Java之旅畫下句點
系列文
Java入門的30張門票30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言