• 沒有找到結果。

第第八八章章 認認識識類類別別

N/A
N/A
Protected

Academic year: 2021

Share "第第八八章章 認認識識類類別別"

Copied!
59
0
0

加載中.... (立即查看全文)

全文

(1)

本章學習目標

認識類別的基本架構

在類別裡使用資料成員與成員函數 學習 this 關鍵字的用法

在類別裡設計 method 的多載

學習如何使用類別裡的公有與私有成員

第 第 八 八 章 章

認 認 識 識 類 類 別 別

(2)

8.1 認識類別

每一個 Java 程式,至少會存在一個或一個以上的類別。

8.1.1 類別的基本概念

矩形具有寬(width)與高(height)兩個基本屬性,根據這兩個屬性,

便可求出它的面積(area)與周長(perimeter)

width

height

面積(area) = width*height 周長(perimeter) = 2(width+height)

(3)

資料成員

每一個矩形,均具有寬與高這兩個屬性,這兩個屬性也就是矩形類別的 資料(data)。

Java 把類別內的資料成員統稱為 field(範疇)。

成員函數

對於矩形類別而言,可以把計算面積與周長的函數納入矩形類別裡,變

成類別的「成員函數」(member function)。

(4)

資料成員、成員函數與封裝

「類別」就是把資料與相關功能「封裝」(encapsulate)在一起。

類別

資料成員 data members 成員函數 member functions

(5)

以矩形類別為例,資料成員與成員函數可以用下圖表示:

描述CRecatngle 類別 的各種屬性

描述CRectangle 類別 可以執行的工作

CRectangle

成員函數 area()-計算面積

perimeter()-計算周長 CRectangle 類別的定義 資料成員

width height

(6)

8.1.2 類別的定義格式 類別定義的語法如下:

class 類別名稱 {

資料型態 field 名稱;

...

傳回值的資料型態 method 名稱(引數 1,引數 2,...) {

程式敘述 ; return 運算式;

} ...

}

宣告field

定義method 的內容 格式8.1.1 類別的定義格式

method 的本體(body)

(7)

以稍早所介紹的矩形為例,可定義如下的矩形類別:

01 class CRrectangle // 定義矩形類別 CRectangle 02 {

03 int width; // 宣告資料成員 width 04 int height; // 宣告資料成員 height 05

06 int area() // 定義成員函數 area(), 用來計算面積 07 {

08 return width*height; // 傳回矩形的面積 09 }

10 int perimeter() // 定義成員函數 perimeter(), 用來計算周長 11 {

12 return 2*(width+height); // 傳回矩形的周長 13 }

14 }

(8)

如果要計算圓面積,則可以把圓面積的計算納入圓形類別的成員函數:

01 class CCircle // 定義 CCircle 類別 02 {

03 double radius; // 宣告資料成員 radius 04

05 double area() // 定義成員函數 area(), 用來傳回圓面積 06 {

07 return 3.14*radius*radius; // 傳回圓面積 08 }

09 }

(9)

8.1.3 建立新的物件

以矩形類別來說,從定義類別到建立新物件的過程,可以把它想像成:

「先打造一個矩形的模版(定義類別),再以此模版製造矩形(建立物件)」

由類別所建立的物件稱為 instance。

(10)

下圖是由矩形類別所建立出具有該類別特性的矩形物件 rect1:

CRectangle

成員函數 area() perimeter() 資料成員 width height

rect1 物件

成員函數 area() perimeter() 資料成員 width height

打造矩形模版

(定義類別)

以模版製造矩形物件

(建立物件)

由類別建立物件

(11)

宣告與建立物件

欲建立屬於某類別的物件,可藉由下面兩個步驟來達成:

(1) 以類別名稱宣告變數。

(2) 利用 new 建立新的物件,並指派給先前所建立的變數。

例如:

CRectangle rect1;

rect1=new CRectangle();

把它縮減成一行:

// 建立新物件,並讓 rect1 指向它

CRectangle rect1= new CRectangle();

(12)

指向物件的變數

建立新的物件,並讓 rect1 變數指向它的過程,可由下圖來表示:

Ox1000 rect1

Ox1000

CRectangle rect1 = new CRectangle();

配置儲存CRectangle物件 所需的記憶空間

把記憶體空間的參考位 址設給rect1 變數存放

參考位址 1 先建立指向物件

參考位址的變數

2

3

CRectangle 類別 所建立的物件

(13)

存取物件的內容

存取到物件裡的特定資料成員,可以透過下面語法來達成:

物件名稱.資料成員名稱

物件 rect1 的寬和高可藉由下列的語法來存取:

rect1.width;

rect1.height;

格式8.1.2

存取物件裡特定的資料成員

(14)

想要把物件 rect1 的寬設定為 10,把高設定為 5,其程式碼的撰寫如下:

01 public static void main(String args[]) 02 {

03 CRectangle rect1; // 宣告變數 rect1

04 rect1=new CRectangle(); // 建立新物件,並將變數 rect1 指派給它 05

06 rect1.width=10; // 設定矩形物件 rect1 的寬為 10 07 rect1.height=5; // 設定矩形物件 rect1 的高為 5 08 }

(15)

8.1.4 使用類別來設計完整的程式

下面的程式碼為建立物件與 field 的存取之範例。

01 // app8_1, 建立物件與 field 的存取

02 class CRectangle // 定義 CRectangle 類別 03 {

04 int width; // 宣告資料成員 width 05 int height; // 宣告資料成員 height 06 }

07

08 public class app8_1 09 {

10 public static void main(String args[]) 11 {

12 CRectangle rect1;

13 rect1=new CRectangle(); // 建立新的物件 14

15 rect1.width=10; // 設定矩形 rect1 的寬 16 rect1.height=5; // 設定矩形 rect1 的高 17

18 System.out.println("width="+rect1.width); // 印出 rect1.width 19 System.out.println("height="+rect1.height); // 印出 rect1.height 20 }

21 }

/* app8_1 OUTPUT--- width=10

height=5

---*/

(16)

當 app8_1 編譯成 byte-code 之後,會產生 CRectangle.class 與 app8_1.class 這兩個檔案:

Java 原始檔裡的每一個類別會 被編譯成獨立的.class 檔案

(17)

8.1.5 同時建立多個物件

如果要同時建立數個物件,只要依相同的方式再建立多個物件即可:

01 // app8_2, 同時建立兩個物件 02 class CRectangle

03 {

04 int width; // 定義資料成員 width 05 int height; // 定義資料成員 height 06 }

07

08 public class app8_2 09 {

10 public static void main(String args[]) 11 {

12 CRectangle rect1,rect2; // 宣告指變數 rect1,rect2 13 rect1=new CRectangle(); // 建立物件 rect1

14 rect2=new CRectangle(); // 建立物件 rect2 15

16 rect1.width=10; // 設定矩形 rect1 的寬 17 rect1.height=5; // 設定矩形 rect1 的高 18

19 rect2.width=12; // 設定矩形 rect2 的寬 20 rect2.height=rect1.height+3; // 設定矩形 rect2 的高

(18)

21

22 System.out.println("rect1.width="+rect1.width);

23 System.out.println("rect1.height="+rect1.height);

24 System.out.println("rect2.width="+rect2.width);

25 System.out.println("rect2.height="+rect2.height);

26 } 27 }

/* app8_2 OUTPUT-- rect1.width=10 rect1.height=5 rect2.width=12 rect2.height=8

---*/

(19)

8.2 成員函數的使用 8.2.1 定義與使用 method

類別裡的 method 可用下面的語法來定義:

傳回值型態 method 名稱(型態 引數 1, 型態 引數 2,...) {

程式敘述 ; return 運算式;

}

物件要呼叫封裝在類別裡的 method 時,只要用下列的語法即可:

物件名稱.method 名稱(引數 1, 引數 2,...)

格式8.2.1

成員函數定義的語法 method 的主體 (body)

格式8.2.2

呼叫封裝在類別內的 method

(20)

app8_3 在類別的定義裡加入了 area()與 perimeter() 兩個 method:

01 // app8_3, method 的建立 02 class CRectangle

03 {

04 int width;

05 int height;

06 int area() // 定義成員函數 area(), 用來計算面積 07 {

08 return width*height; // 傳回矩形的面積 09 }

10

11 int perimeter() // 定義成員函數 perimeter(), 用來計算周長 12 {

13 return 2*(width+height); // 傳回矩形的周長 14 }

15 } 16

17 public class app8_3 18 {

19 public static void main(String args[]) 20 {

21 CRectangle rect1;

22 rect1=new CRectangle(); // 建立新的物件

(21)

23

24 rect1.width=10; // 設定矩形 rect1 的寬 25 rect1.height=5; // 設定矩形 rect1 的高 26

27 System.out.println("area="+rect1.area());

28 System.out.println("perimeter="+rect1.perimeter());

29 } 30 }

/* app8_3 OUTPUT-- area=50

perimeter=30

---*/

(22)

8.2.2 再看一個簡單的範例

app8_4 建立一個圓形類別 CCircle,類別中包含了資料成員與成員函 數,用來顯示圓面積:

01 // app8_4, 圓形類別 CCircle

02 class CCircle // 定義類別 CCircle 03 {

04 double pi=3.14; // 將資料成員設定初值 05 double radius;

06

07 void show_area() // show_area() method, 顯示出圓面積 08 {

09 System.out.println("area="+pi*radius*radius);

10 } 11 }

12 public class app8_4 13 {

14 public static void main(String args[]) 15 {

16 CCircle cir1=new CCircle(); // 建立 cirl 物件 17 cir1.radius=2.0; // 設定 radius 的值 18 cir1.show_area(); // 呼叫 show_area()函數 19 }

20 }

/* app8_4 OUTPUT--- area=12.56

---*/

(23)

app8_5 說明了圓形類別 CCircle 之 field 於記憶體內的配置關係:

01 // app8_5, 圓形類別 CCircle 之 field 於記憶體內的配置關係 02 class CCircle // 定義類別 CCircle

03 {

04 double pi=3.14; // 將資料成員設定初值 05 double radius;

06

07 void show_area() // show_area() method, 顯示出圓面積 08 {

09 System.out.print("pi="+pi);

10 System.out.println(", area="+pi*radius*radius);

11 } 12 }

13 public class app8_5 14 {

15 public static void main(String args[]) 16 {

17 CCircle cir1=new CCircle(); // 建立 cir1 物件 18 CCircle cir2=new CCircle(); // 建立 cir2 物件 19

20 cir1.radius=cir2.radius=2.0; // 設定資料成員的值 21 cir2.pi=3.0; // 更改 cir2 的 pi 值 22

(24)

23 cir1.show_area();

24 cir2.show_area();

25 } 26 }

/* app8_5 OUTPUT---- pi=3.14, area=12.56 pi=3.0, area=12.0 ---*/

(25)

每一個新產生的物件,其資料成員在記憶體中均有其固定的存放處,如 下圖所示:

pi

3.14

radius

cir1

pi radius

cir2

2.0

3.0 2.0

(26)

8.2.3 資料成員的存取方式

在 main() method 內如果需要存取 field 時,可透過 物件名稱 .資料成員名稱

的語法來進行。

下面的語法即可對 radius 與 pi 進行存取的動作:

01 class app 02 {

03 public static void main(String args[]) 04 {

05 ....

06 cir1.radius=2.0;

07 cir1.pi=3.0;

08 } 09 }

radius 與 pi 均為 cir1 的 field

(27)

如果是在類別的內部使用資料成員,則可直接取用資料成員的名稱:

01 class CCircle 02 {

03 double pi=3.14;

04 double radius;

05

06 void show_area() 07 {

08 System.out.println("area="+pi*radius*radius);

09 } 10 }

可直接取用field 的名稱

(28)

this 關鍵字

下面的程式碼片段是把 CCircle 類別的資料成員之前冠上 this 的寫法:

01 class CCircle 02 {

03 double pi=3.14;

04 double radius;

05

06 void show_area() 07 {

08 System.out.println("area="+this.pi*this.radius*this.radius);

09 } 10 }

在資料成員前面加上this,此時的 this 即代表取用此一資料成員的物件

(29)

8.2.4 成員函數的相互呼叫

app8_6 示範了如何呼叫在類別內部的成員函數:

01 // app8_6, 在類別內部呼叫 method

02 class CCircle // 定義類別 CCircle 03 {

04 double pi=3.14; // 將資料成員設定初值 05 double radius;

06

07 void show_area() // show_area() method, 顯示出圓面積 08 {

09 System.out.println("area="+pi*radius*radius);

10 }

11 void show_all() // show_all() method, 同時顯示出半徑與圓面積 12 {

13 System.out.println("radius="+radius);

14 show_area(); // 於類別內呼叫 show_area() method 15 }

16 }

17 public class app8_6 18 {

19 public static void main(String args[]) 20 {

(30)

21 CCircle cir1=new CCircle(); // 宣告並建立新的物件 22 cir1.radius=2.0;

23 cir1.show_all(); // 用 cir1 物件呼叫 show_all() 24 }

25 }

/* app8_6 OUTPUT-- radius=2.0

area=12.56

---*/

(31)

8.3 引數的傳遞與傳回值

method 不需傳遞任何引數時,method 的括號內什麼也不必填:

呼叫 method 並傳遞引數時,引數是置於 method 的括號內來進行傳遞。

show_area()

沒有傳遞任何引數,因此不需填上任何文字

(32)

8.3.1 呼叫 method 並傳遞引數

下面的範例中,把 CCircle 類別加上 setRadius() method,用來設定圓 形物件的半徑:

01 // app8_7, 呼叫 method 並傳遞引數 02 class CCircle // 定義類別 CCircle 03 {

04 double pi=3.14; // 將資料成員設定初值 05 double radius;

06

07 void show_area() // show_area() method, 顯示出半徑及圓面積 08 {

09 System.out.println("radius="+radius);

10 System.out.println("area="+pi*radius*radius);

11 }

12 void setRadius(double r) // setRadius() method, 可用來設定半徑 13 {

14 radius=r; // 設定 radius 成員的值為 r 15 }

16 }

17 public class app8_7 18 {

(33)

19 public static void main(String args[]) 20 {

21 CCircle cir1=new CCircle(); // 宣告並建立新的物件 22 cir1.setRadius(2.0); // 設定 cir1 的半徑為 2.0 23 cir1.show_area();

24 } 25 }

/* app8_7 OUTPUT-- radius=2.0

area=12.56

---*/

(34)

變數 r 是區域變數,一旦離開 setRadius(),變數 r 即會失去效用:

01 // app8_7,呼叫 method 並傳遞引數 02 class CCircle // 定義類別 CCircle 03 {

...

12 void setRadius(double r) 13 {

14 radius=r;

15 } 16 }

r 是區域變數,一離開此範圍,

變數r 即屬無效

(35)

8.3.2 傳遞多個引數

下面的範例是利用傳遞多個引數的方式,同時設定所有的資料成員:

01 // app8_8, 圓形類別 CCircle

02 class CCircle // 定義類別 CCircle 03 {

04 double pi; // 將資料成員設定初值 05 double radius;

06

07 void show_area() // show_area() method, 顯示出圓面積 08 {

09 System.out.println("area="+pi*radius*radius);

10 }

11 void setCircle(double p,double r) // 擁有兩個引數的 method 12 {

13 pi=p;

14 radius=r;

15 } 16 }

17 public class app8_8 18 {

19 public static void main(String args[]) 20 {

(36)

21 CCircle cir1=new CCircle(); // 宣告並建立新的物件

22 cir1.setCircle(3.1416,2.0); // 呼叫並傳遞引數到 setCircle() 23 cir1.show_area();

24 } 25 }

/* app8_8 OUTPUT-- area=12.5664

---*/

(37)

8.3.3 沒有傳回值的 method

若 method 本身沒有傳回值,則必須在 method 定義的前面加上關鍵字 void,如下面的程式碼:

void show_area(){ // show_area() method, 顯示出圓面積 {

System.out.println("area="+pi*radius*radius);

}

如果 method 沒有傳回值,則 return 敘述可以省略。

method 本身沒有傳回值,則 必須在前面加上void

(38)

也可以在 method 最後加上 return 敘述,但不接任何的運算式:

void show_area(){ // show_area() method, 顯示出圓面積 {

System.out.println("area="+pi*radius*radius);

return;

}

因沒有傳回值,所以可在method 結束前 加上return 敘述,但不接任何的運算式,

其執行結果與前例相同

(39)

8.3.4 有傳回值的 method

下面的範例中,特別在 CCircle 類別裡加上一個新的 getRadius() method ,用來傳回物件的半徑。

01 // app8_9, 圓形類別 CCircle

02 class CCircle // 定義類別 CCircle 03 {

04 double pi; // 將資料成員設定初值 05 double radius;

06

07 double getRadius() // getRadius(), 用來傳回物件的半徑 08 {

09 return radius;

10 }

11 void setCircle( double p, double r) 12 {

13 pi=p;

14 radius=r;

15 } 16 }

17 public class app8_9 18 {

(40)

19 public static void main(String args[]) 20 {

21 CCircle cir1=new CCircle(); // 宣告並建立新的物件 22 cir1.setCircle(3.1416,2.0);

23 System.out.println("radius="+cir1.getRadius());

24 } 25 }

/* app8_9 OUTPUT-- radius=2.0

---*/

getRadius() method 的本體很簡單,僅有一行敘述:

return radius;

經由上面的敘述,即可傳回物件的半徑 radius。

(41)

下圖是說明傳回值型態與傳回值的關係。

07 double getRadius() 08 {

09 return radius;

10 }

由於傳回值的資料型態為double,

因此getRadius() method 之前要冠 double

(42)

8.4 成員函數的多載 8.4.1 多載

在 CCircle 類別裡加入了一個字串的資料成員 color,代表圓形之顏色。

01 // app8_10, 函數的多載(一)

02 class CCircle // 定義類別 CCircle 03 {

04 String color;

05 double pi=3.14;

06 double radius;

07

08 void setColor(String str) // 設定 color 的 method 09 {

10 color=str;

11 }

12 void setRadius(double r) // 設定 radius 的 method 13 {

14 radius=r;

15 }

16 void setAll(String str, double r) // 同時設定 color 與 radius 17 {

/* app8_10 OUTPUT--- color=Red, Radius=2.0 area=12.56

color=Blue, Radius=4.0 area=50.24

---*/

(43)

18 color=str;

19 radius=r;

20 }

21 void show() // 列印半徑、顏色與圓面積 22 {

23 System.out.println("color="+color+", Radius="+radius);

24 System.out.println("area="+pi*radius*radius);

25 } 26 }

27 public class app8_10 28 {

29 public static void main(String args[]) 30 {

31 CCircle cir1=new CCircle();

32

33 cir1.setColor("Red"); // 設定 cir1 的 color 34 cir1.setRadius(2.0); // 設定 cir1 的 radius 35 cir1.show();

36

37 cir1.setAll("Blue",4.0); // 同時設定 cir1 的 color 和 radius 38 cir1.show();

39 } 40 }

/* app8_10 OUTPUT--- color=Red, Radius=2.0 area=12.56

color=Blue, Radius=4.0 area=50.24

---*/

(44)

下 面 的 例 子 把 app8_10 的 method 用 多 載 的 特 性 , 以 單 獨 一 個 setCircle() method 的多載來取代。

01 // app8_11, 函數的多載(二)

02 class CCircle // 定義類別 CCircle 03 {

04 String color;

05 double pi=3.14;

06 double radius;

07

08 void setCircle(String str) // 設定color 成員 09 {

10 color=str;

11 }

12 void setCircle(double r) // 設定 radius 成員 13 {

14 radius=r;

15 }

16 void setCircle(String str, double r) // 同時設定 color 與 radius 17 {

18 color=str;

19 radius=r;

20 }

/* app8_11 OUTPUT--- color=Red, Radius=2.0 area=12.56

color=Blue, Radius=4.0 area=50.24

---*/

(45)

21 void show() 22 {

23 System.out.println("color="+color+", Radius="+radius);

24 System.out.println("area="+pi*radius*radius);

25 } 26 } 27

28 public class app8_11 29 {

30 public static void main(String args[]) 31 {

32 CCircle cir1=new CCircle();

33

34 cir1.setCircle("Red"); // 呼叫第 8 行的 setCircle() 35 cir1.setCircle(2.0); // 呼叫第 12 行的 setCircle() 36 cir1.show();

37

38 cir1.setCircle("Blue",4.0); // 呼叫第 16 行的 setCircle() 39 cir1.show();

40 } 41 }

/* app8_11 OUTPUT--- color=Red, Radius=2.0 area=12.56

color=Blue, Radius=4.0 area=50.24

---*/

(46)

使 用 多 載 時 , 編 譯 器 會 根 據 引 數 的 個 數 與 型 態 , 來 呼 叫 相 對 應 的 method:

cir1.setCircle("Red");

cir1.setCircle(2.0);

cir1.setCircle("Blue",4.0);

void setCircle(String str){

color=str;

}

void setCircle(double r){

radius=r;

}

void setCircle(String str, double r){

color=str;

radius=r;

}

(47)

8.4.2 使用多載常犯的錯誤

我們無法設計出引數個數或引數型態完全相同,而只有傳回型態不同的 多載。

下面的程式碼是行不通的:

void setCircle(double radius){ ... };

int setCircle(double radius){ ... };

一旦呼叫 setCircle() method,程式無法判斷是哪一個 method 被呼叫。

這兩個method 的引數個數和型態 完全相同,但傳回型態不同

(48)

下列多載的程式碼在 Java 裡是合法的:

void setCircle(String color,double radius);

int setCircle(double radius);

method 的引數個數和型態不 同,且傳回型態也不相同

(49)

8.5 公有成員與私有成員

下面的程式碼和 app8_4 幾乎完全相同,除了 18 行的設定,cir1 物件 的 radius 成員被設成-2.0:

01 // app8_12, 圓形類別 CCircle

02 class CCircle // 定義類別 CCircle 03 {

04 double pi=3.14; // 將資料成員設定初值 05 double radius;

06

07 void show_area() 08 {

09 System.out.println("area="+pi*radius*radius);

10 } 11 } 12

CCircle 類別 內部

(50)

13 public class app8_12 14 {

15 public static void main(String args[]) 16 {

17 CCircle cir1=new CCircle();

18 cir1.radius=-2.0;

19 cir1.show_area();

20 } 21 }

/* app8_12 OUTPUT--- area=12.56

---*/

CCircle 類別 外部 CCircle 類別外部可以

直接更改成員資料

(51)

8.5.1 建立私有成員

透過私有成員(private member)的設定,即可限定類別中資料成員的 存取,設定的方式如下:

01 class CCircle 02 {

03 private double pi=3.14;

04 private double radius;

05 ....

06 }

設定field 為私有成員

(52)

app8_13 與 app8_12 除了在 field 之前加上 private 字樣之外,程式碼 完全相同。

01 // app8_13, 私有成員無法從類別外部來存取的範例 02 class CCircle // 設定 field 為私有成員 03 {

04 private double pi=3.14; // 將資料成員設定初值 05 private double radius;

06

07 void show_area() 08 {

09 System.out.println("area="+pi*radius*radius);

10 } 11 }

12 public class app8_13 13 {

14 public static void main(String args[]) 15 {

16 CCircle cir1=new CCircle();

17 cir1.radius=-2.0;

18 cir1.show_area();

19 } 20 }

CCircle 類別內部,所以 可以存取私有成員

CCircle 類別外部,無法 直接更改私有成員

(53)

編譯 app8_13,將會得到下列的錯誤訊息:

radius has private access in CCircle cir1.radius=-2.0;

^ 1 error

Process completed.

這個錯誤訊息說明了 radius 是私有成員,無法從 CCircle 類別以外的地 方來存取:

class CCircle {

private double pi=3.14;

private double radius;

...

} public static void main(String args[]) {

...

cir1.radius=-2.0;

...

} 無法存取到類別內

部的private 成員

(54)

8.5.2 建立公有成員

下面的範例是在 CCircle 類別內加上一個公有成員 setRadius(),也加入 了一個私有的成員函數 area():

01 // app8_14, 公有成員(method)的建立 02 class CCircle // 定義類別 CCircle 03 {

04 private double pi=3.14; // 將資料成員設定為 private 05 private double radius;

06

07 private double area() // 定義私有的成員函數 area() 08 {

09 return pi*radius*radius;

10 }

11 public void show_area() // 定義公有的成員函數 show_area() 12 {

13 System.out.println("area="+ area()); // 呼叫私有成員 area() 14 }

15 public void setRadius(double r) // 定義公有的成員函數 setRadius() 16 {

17 if(r>0) 18 {

(55)

19 radius=r; // 將私有成員 radius 設為 r 20 System.out.println("radius="+radius);

21 } 22 else

23 System.out.println("input error");

24 } 25 } 26

27 public class app8_14 28 {

29 public static void main(String args[]) 30 {

31 CCircle cir1=new CCircle();

32 cir1.setRadius(-2.0); // 呼叫公有的 setRadius() method 33 cir1.show_area(); // 呼叫公有的 show_area() method 34 }

35 }

/* app8_14 OUTPUT--- input error

area=0.0

---*/

(56)

類別內部的公有成員,可直接由類別外部來存取:

class CCircle // 定義類別CCircle {

....

public void setRadius(double r){

....

}

} class app8_14

{

public static void main(String args[]) {

CCircle cir1=new CCircle();

cir1.setRadius(-2.0);

cir1.show_area();

} } 可以存取到類別內

部的public 成員

(57)

8.5.3 資料的封裝

封裝(encapsulation),就是把 field 和 method 依功能劃分為「私有成員」

與「公有成員」,並且包裝在一個類別內來保護私有成員,使得它不會

直接受到外界的存取。

(58)

8.5.4 省略 public 與 private

public 與 private 是用來設定公有與私有成員的「修飾子」(modifier)。

類別內成員的修飾子與存取等級的關係,如下圖所示:

class 1 class 2 沒 有 修 飾 子 的 成員

public 成員 private 成員

package 1

class 3

package 2

(59)

參考文獻

相關文件

第一梯次 第二梯次 第二梯次 第二梯次 第二梯次 第三梯次 第三梯次 第三梯次 第三梯次 2.未來將停辦職類 未來將停辦職類 未來將停辦職類 未來將停辦職類、 、 、 、級別 級別 級別 級別:

一、 本職類檢定規範制定係依據行政院勞工委員會八十七年八月十一日台(八十 七)勞職檢字第 033372 號函辦理。.

第一梯次 第二梯次 第二梯次 第二梯次 第二梯次 第三梯次 第三梯次 第三梯次 第三梯次 2.未來將停辦職類 未來將停辦職類 未來將停辦職類 未來將停辦職類、 、 、 、級別 級別 級別 級別:

主題論文一: : :善用 : 善用 善用 善用「 「 「小報 「 小報 小報 小報」 」 」 」創意 創意 創意 創意、 、 、 、開展 開展 開展「 開展 「 「 「大報 大報 大報」 大報 」 」新局

對於給定的一個 x 值,經過某一對應方式後得到「唯一」的 y 值,這種對應方式我們稱 為函數,其中 x 是自變數,y 是應變數。. 而在表

確認類別點選

語文運用 留意錯別字 辨識近義詞及詞語 的感情色彩 認識成語

教學流程 配合範疇 單元舉例 備註 第一步:你講我講大家講 讀、寫 水果圖片 字詞卡 字詞類別. 第二步:文章大電視 聽、讀