跳到主要內容

物件導向觀念深入3 - 巢狀類別、匿名類別與 Enum


頻道需要你的支持謝謝你成為我們的會員(加入會員)

影片1 用生活化的範例讓你搞懂什麼是 Inner Class 並了解它的使用時機





影片2 用生活化的範例讓你搞懂什麼是 Static Nested Class 與 Local Class 並了解它們的使用時機  



影片3 匿名類別的目的、使用時機與方式



影片4 開發模型(Design Pattern) - Builder Pattern 的必要性與開發流程



影片5 enum 有用到嗎?老實說,不會用就虧大了=> enum 的使用時機與方式 



影片6 深入 enum 開發細節,開發出實用的 enum 



範例


一、巢狀類別 (Nested Classes)

 

Java語言允許在類別中宣告類別,宣告在類別中的類別稱之為:巢狀類別。使用巢狀類別的原因包括:

l   邏輯性
如果一個類別,只針對另一個類別有用。此時,把這個類別宣告為另一個類別的內部類別,以輔助類別的形態存在,是合乎邏輯的。也可以使程式碼更為精簡。

l   隱密性
如果有一個類別,需要絕對的安全性。把它隱藏在另一個類別中。讓它對外界而言,是隱形的。是一個增加安全性的做法。

l   可讀性
它可以讓程式碼更容易讀以及更好維護。在外部類別中嵌入內部類別可以使程式碼更接近使用它的位置。

 

1.          Inner class
物件成員內部類別,可以存取其他成員。不可以宣告非 final static 欄位與 static 方法。

2.          Static Nested Class
類別成員巢狀類別。不可以存取非 static 成員。

3.          Local Class
區域內部類別,可以宣告在任何區塊中。需注意敍述的順序。不可以修改區域變數或參數的值。

 

二、匿名類別

 

讓你可以寫出更簡潔的程式碼,它讓我們同時宣告並實體化一個類別。當我們需要一個類別,它只使用一次的時候也就是只需要一個物件的時候,可以撰寫匿名類別。

匿名類別可以是物件成員內部類別,也可以是區域內部類別。如果是區域內部類別,就必須遵守區域內部類別的規定,不可以修改區域變數或參數的值。

匿名類別是指定類別的子類別指定介面的實作類別。類別中可以新增自己的成員或 override 父類別中的成員。

匿名類別的敍述不是宣告敍述,是建立物件的運算式

匿名類別是多型的應用

 

1.          必須有

                            i.                new

                           ii.                指定要繼承的類別或要實作的界面

                         iii.                一組小括號,括號中可以置入指定類別的建構方法要求的參數值;若是界面則保持空括號。

                         iv.                body

2.          可以有

                            i.                欄位

                           ii.                方法

                         iii.                初始化區塊

                         iv.                內部類別

3.          不可以有

                            i.                建構方法 


 任務 :應用巢狀類別,實作開發模型(Design pattern) => Builder Pattern


 三、enum

提供型別安全列舉物件
public static final
欄位使用時必須撰寫範圍檢查的程式碼,用來防止錯誤發生。但是,這畢竟屬於執行時期的範圍檢查。在某一些狀況之下,設計師希望能夠在編譯時期就確定程式碼不會產生錯誤,無論如何都能夠得到期望中的結果。針對這樣的需求,Java提供 enum。它可以讓程式設計師撰寫程式碼進行編譯時期的範圍檢查

1.          宣告

                            i.                所有變數都是參照到本類別物件的參考變數

                           ii.                所有變數都是public static final

                         iii.                建構方法
建構方法不可以是 protected public

                         iv.                若宣告在類別中預設為靜態內部類別 (static nested class)

2.          常用方法

                            i.                values
呼叫此方法可以取得一個陣列,包含所有元素物件。

                           ii.                ordinal
呼叫此方法得到元素物件的代號。