close

首先看完這一主題你會學習到:

  • 如何定義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。 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 melomelo1988 的頭像
    melomelo1988

    melo 唐

    melomelo1988 發表在 痞客邦 留言(0) 人氣()