2006年4月22日 星期六

基本OO變數

Java基本OO的變數種類

Java物件導向中有:類別變數(class variable)、物件變數(object variable)、區域變數(local variable)
等基本類型

他們在存取的範圍(scope)、生命週期(lift cycle time),都有不同的用法。

不談死記的方法,想像在OO中的理念,一個物件的定義可以用Class來表示。即自己描寫製作一個類別

class Animal{

}

在一個類別裡,我們會有幾個元素,理所當然就好像他會有名字、年齡、性別,這種可以描述物件的屬性attribute或稱為metadata;然後是這個類別的行為,如喝水、說話、做等行為。以Java來說一個 class裡就包含這樣的元素,你可以稱之為 variables 和 methods,

class Animal{
String name;
public void speak(){
}
}

簡單的 class 定義其實就只是一堆 variable 和 method 的集合,全部都屬於該 class 的member
所以在C++又有稱之 member variable or member function ,表示這些為該類別的"成員"

說到這裡知道 class 的基本要素後,你要想想把 class 當作你的對 object 的定義,
你可以用 你所自訂的 class 去產生許多物件,即產生物件的多個實例(instance)。

這裡要注意的是,後面只會提 "class" 和 用 class 產生的 "instance",
不會在用"object" 來解釋 Java 的 OO,以免你把 instance 跟一般所述的 object 搞混,
object 會讓你把 class 和 instance 弄混。

當你知道什麼是 instance 之後,你可以用你所寫的 class 去產生一個 instance
(一個有自己資料的個別instance), 當設定他的資料欄位或操作他的方法時,
都屬於該instance的操作。

Animal a1 = new Animal( );

//這是產生一個 instance 的語法。

Animal a2 = new Animal( );

//則是另一個 instance

a1.name 就是 instance variable ,該變數 name 是屬於 al 的 ( 雖然a1.name存取方式有違封裝性 )
instance variable 的特性是 不同的 instance 間,各自 instance variable 並不相干。
a1 的 name 可以是"小白" , a2 的 name 可以是"阿花"。

//-------------------------------分隔線 ------------------------------------------------------ ------------
瞭解什麼是instance variable後,皆下來可以想想是否會有 variable 是同一種 class所共享的變數,
有種全域變數的感覺,答案是有的。 即是 "class variable"

class Animal{
static int max_age_limite ;
}

static 是 java 的 關鍵字,可以宣告class variable,如果宣告成 class variable 時,
整個 class 共享同一個變數。通常使用時不會在去instance 後在存取 ,
可以直接使用class name去存取,如 Animal.max_age_limite,
若是用
a1.max_age_limite ++ ;
a2.max_age_limite ++ ;

則 max_age_limite 會被加兩次,他們指的是同一個變數

注意,當能用" . " 去直接存取變數時,表示該變數是宣告成 public scope ,可能違反物件封裝性質

待續...

沒有留言: