首先看完這一主題你會學習到:
- 如何定義class以及class中的methods,與fields
- 了解如何應用private 與 public 來設定存取class 的method 與 fields
- 了解如何在建立class的時候會去invoke 此class的 constructor
- 撰寫以及呼叫自己的constructors
- 了解static key word
- 了解如何使用 anonymous classes
了解什麼是class
可以將class想像成一幅藍圖,例如:汽車藍圖,裡面有可以規劃汽車的馬力,油箱容量等..。
請注意這是藍圖不是真的汽車。
設計以及使用class:
class Circle
{
int radius;
double Area()
{
return Math.PI * radius * radius;
}
}
上述 radius 稱之為 此class 的 field , 而Area() 稱之為此class 的 method。
解釋完何為class,接著來解釋如何建立instance(或可稱object),你可以將object想像成依照藍圖(class)作出來之實體,
使用方式:
Circle c = new Circle();
c 就是 Circle 這個 class之object。
控制存取範圍
上述提到field 以及 method,可以使用關鍵字public , private來限制外界對其存取範圍。
ex.1 如果我們在field 前面加上 public
例如: public int radius,那麼能從class外或內存取這個field。
ex.2 如果我們在field 前面加上 private
例如: private int radius,那麼就只能從class內存取這個field。(如果有點搞不懂沒關係,下面會用程式來說明)
注意:如果field前不加上任何關鍵字,那麼會預設是private
ex.3 method 同理,可以在前面加上private or public
例如: public double Area()
範例:
class Circle
{
private int radius;
public double Area()
{
return Math.PI * radius * radius;
}
}
你可以看到,radius是private所以無法從class外去存取它,但是Area()是public所以我們可以從外存取它,
這代表說,我們可以由外界操控Area()去存取radius(原因是因為Area()是在class內)。
操作 constructors
你可以將constructor視為一個較特殊的method,特別地方在當你在建立class的instance時,會自動去執行constructor。
使用constructor 注意點有以下:
1.constructor必須與class同名
2.constructor可以傳入參數,但回傳值必須為void
3.就算你不寫constructor, .NET也會自動幫你建立default constructor,當然你也可以自己寫。
ex.
class Circle
{
private int radius;
public Circle() // default constructor
{
radius = 0;
}
public double Area()
{
return Math.PI * radius * radius;
}
}
請注意上面constructor前面關鍵字為public,所以你可以從class外建立此class之instance.
但若你將關鍵字改為private,你可以發現,你將沒辦法從此class外建立此class之instance。
建立程式碼 如下:
Circle c = new Circle(); //建立class之 instance
double area = c.Area();
Overloading(台灣翻譯為多載) constructor
上面有提到如果你在建立class 時候不寫constructor, .NET也會自己幫你產生,但現在要教你的是你可以寫不同版本之constructor。
class Circle
{
private int radius;
public Circle() // default constructor
{
radius = 0;
}
public Circle(int initialRadius) // overloaded constructor
{
radius = initialRadius;
}
public double Area()
{
return Math.PI * radius * radius;
}
}
如果你有的問題是,那我在建立instance時會去呼叫哪個constructor?
如下:
Circle c = new Circle(45); //你在建立instance時候傳入45,所以他會去呼叫有傳入參數版本之constructor。
留言列表