2011年3月6日 星期日

漫談物件導向(三) - 定義類別

定義類別

在物件導向機制下,定義類別就像是設計工程藍圖,而依照設計藍圖實作出來的產品就是物件實體。類別定義用來描述物件的結構與行為,若先不考慮指定繼承關係,類別定義的語法如下:

modifier class class-name {
    declaration of data members  //資料成員宣告
    constructor  //物件建構函式
    definition of class methods    //成員方法定義
}

modifier用來指定類別的存取限制,可以使用以下的修飾字:

public
此種類別可以被任何類別所使用。Java規定一個程式檔內最多只能有一個public類別,而且public類別名稱必須和檔案名稱的主檔名相同。
無修飾字 (預設)此種類別只能被同package內的類別或放置在相同目錄下的類別使用。
final 宣告為最終類別,表示此類別不能用來做為其它類別的父類別。
abstract宣告為抽象類別,此種類別中定義了抽象方法。由於抽象方法只定義函式介面而沒有實作方法內部程式碼,因此抽象類別不能被實體化,但仍可做為其它類別的父類別。
 
class-name為類別名稱,必須是合法的識別字,命名時須注意以下幾點:
1. 第一個字元必須是英文字母、底線符號或$。
2. 名稱沒有長度限制,但有區分大小寫,math與Math將視為不同。
3. 不能使用Java的關鍵字,例如public, abstract, this…等。

右左大括弧內為類別主體,類別主體中可以定義資料成員 (data members)、物件建構子 (constructor)、及方法 (methods)。三者順序並無限制,但為使程式更具可讀性,通常會優先宣告資料成員,接著定義物件建構子,而將其它類別方法置於後。

資料成員用來記錄物件內部的資訊或狀態,有時也稱之為properties或attributes。成員方法則描述物件的行為,也有文件稱之為operations或services。

物件建構子是一個特殊的方法,其名稱必須與類別名稱一樣,而且沒有傳回值 (不是void樣)。當應用程式使用new運算子建立一個物件時,該物件的建構子會最先被執行,因此,會將物件初始化工作放在物件建構子中。

下列程式碼中定義了一個SHAPE類別,在SHAPE類別中宣告了一個成員方法 – showinfo。

public class SHAPE {
    protected void showinfo() {
        System.out.println("This is a shape");
   }
}

成員方法在宣告時可設定其存取層級,有效設定值包括public、protected、package及private,說明如下:

存取層級同一Class同一Package子類別其它Package
private
v
package
v
v
protected
v
v
v
要繼承
public
v
v
v
v