Java class CStudent private float score private String

  • Slides: 98
Download presentation

Java的類別 class CStudent { private float score; private String address; private int phone; public

Java的類別 class CStudent { private float score; private String address; private int phone; public int id; public String name; public String major; } 或 class CStudent { private float score; public int id; //相同封裝等級的不一定要擠在一起 private int phone; public String name; private String address; public String major; }

Java的類別 【範例2】 延續範例1,在CStudent類別中,宣告兩個『公用等級』的( 成員)函式,分別為show. Id( )和show. Major( ),函式用途分別 為『顯示學號』及『顯示科系』。 class CStudent { private float

Java的類別 【範例2】 延續範例1,在CStudent類別中,宣告兩個『公用等級』的( 成員)函式,分別為show. Id( )和show. Major( ),函式用途分別 為『顯示學號』及『顯示科系』。 class CStudent { private float score; private String address; private int phone; public int id; public String name; public String major; public int show. Id( ){. . . } //顯示並回傳學號,回傳型態為int public void show. Major( ){. . . } //顯示科系,回傳型態為void }

Java的類別 或 class CStudent { private float score; private String address; private int phone;

Java的類別 或 class CStudent { private float score; private String address; private int phone; public int show. Id( ){. . . } //顯示並回傳學號,回傳型態為int public void show. Major( ){. . . } //顯示科系,回傳型態為void public int id; public String name; public String major; } 範例說明: 上述範例,當物件被實際建立之後,id, name, major都可以被外部函 式所取用,show. Id()與show. Major()也可以被外部程式所執行,但 score、address與phone只能被同一類別的成員函式存取(例如 show. Id成員函式)。

Java的物件 1 2 3 4 5 6 7 8 9 10 11 12 13

Java的物件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 /* 檔名: ch 7_01. java 功能: 定義汽車類別與宣告3個物件 */ package my. Java. ch 07; import java. lang. *; public class ch 7_01 //主類別 { public static void main(String args[]) { CCar bus = new CCar(); CCar truck = new CCar(); CCar taxi = new CCar(); bus. name="公車"; bus. wheel=6; bus. person=40; truck. name="卡車"; truck. wheel=8; truck. person=3; taxi. name="計程車"; taxi. wheel=4;

Java的物件 26 27 28 29 30 31 32 33 34 35 36 37 38

Java的物件 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 taxi. person=5; //taxi. engine="V 16"; //不可存取私用等級的變數 System. out. print(bus. name + "有" + bus. wheel + "個輪子"); System. out. println(", 可載" + bus. person + "人"); System. out. print(truck. name + "有" + truck. wheel + "個輪子"); System. out. println(", 可載" + truck. person + "人"); System. out. print(taxi. name + "有" + taxi. wheel + "個輪子"); System. out. println(", 可載" + taxi. person + "人"); } } class CCar { public int wheel; public int person; public String name; private String engine; } 執行結果: 公車有6個輪子, 可載40人 卡車有8個輪子, 可載3人 計程車有4個輪子, 可載5人

方法 1 2 3 4 5 6 7 8 9 10 11 12 13

方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 /* 檔名: ch 7_02. java 功能: 透過公用成員函式存取私用資料與成員函式 */ package my. Java. ch 07; import java. lang. *; public class ch 7_02 //主類別 { public static void main(String args[]) { CMy. Class X = new CMy. Class(); CMy. Class Y = new CMy. Class(); X. init. Var(); //在X物件上, 執行init. Var成員函式 Y. init. Var(); //在Y物件上, 執行init. Var成員函式 X. add. Var(10); //在X物件上, 執行add. Var成員函式 System. out. print("物件Xt"); X. show. Var(); System. out. print("物件Yt"); Y. add. Var(5); //在Y物件上, 執行add. Var成員函式 Y. show. Var();

方法 26 27 28 29 30 31 32 33 34 35 36 37 38

方法 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 System. out. print("物件Yt"); Y. add. Var(3); //在Y物件上, 執行add. Var成員函式 Y. show. Var(); } } class CMy. Class { public void init. Var() { Var=1; } public void add. Var(int b) { Var=Var+b; } public void show. Var() { real. Show(); //執行private等級的函式 } private int Var; private void real. Show() { System. out. println("Var=" + Var); } }

方法 1 2 3 4 5 6 7 8 9 10 11 12 13

方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 /* 檔名: ch 7_03. java 功能: 成員變數設定初始值 */ package my. Java. ch 07; import java. lang. *; public class ch 7_03 //主類別 { public static void main(String args[]) { CMy. Class X = new CMy. Class(); CMy. Class Y = new CMy. Class(); X. add. Var(10); //在X物件上, 執行add. Var成員函式 System. out. print("物件Xt"); X. show. Var(); System. out. print("物件Yt"); Y. add. Var(5); //在Y物件上, 執行add. Var成員函式 Y. show. Var(); System. out. print("物件Yt"); Y. add. Var(3); //在Y物件上, 執行add. Var成員函式 Y. show. Var(); }

方法 27 28 29 30 31 32 33 34 35 36 37 38 39

方法 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 } class CMy. Class { public void add. Var(int b) { Var=Var+b; } public void show. Var() { real. Show(); //執行private等級的函式 } private int Var=1; //設定初始值 private void real. Show() { System. out. println("Var=" + Var); } } 執行結果:(同範例7 -2) 範例說明: 第 39行,Var成員變數被設定了初始值為 1,因此不需要init. Var()函式, 因為當物件實體產生時,物件的Var成員就被設定為 1。

Practice 1 設計一個三角形類別 42 edge 1 private int edge 2 private int edge 3

Practice 1 設計一個三角形類別 42 edge 1 private int edge 2 private int edge 3 private int 設計一個方法(public),可計算三角形的周長。在主類別 印出結果。

建構子 【觀念範例7 -4】:使用建構函式改寫範例7 -2,使其成為建構 函式以自動進行成員變數的初始化 範例7 -4:ch 7_04. java(隨書光碟 my. Javach 07ch 7_04. java)

建構子 【觀念範例7 -4】:使用建構函式改寫範例7 -2,使其成為建構 函式以自動進行成員變數的初始化 範例7 -4:ch 7_04. java(隨書光碟 my. Javach 07ch 7_04. java) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /* 檔名: ch 7_04. java 功能: 建構函式 */ package my. Java. ch 07; import java. lang. *; public class ch 7_04 //主類別 { public static void main(String args[]) { CMy. Class X = new CMy. Class(1); //自動呼叫建構函式 CMy. Class Y = new CMy. Class(2); //自動呼叫建構函式 X. add. Var(10); //在X物件上, 執行add. Var成員函式 System. out. print("物件Xt");

建構子 17 18 19 20 21 22 23 24 25 26 27 28 29

建構子 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 : 48 X. show. Var(); System. out. print("物件Yt"); Y. add. Var(5); //在Y物件上, 執行add. Var成員函式 Y. show. Var(); System. out. print("物件Yt"); Y. add. Var(3); //在Y物件上, 執行add. Var成員函式 Y. show. Var(); } } class CMy. Class { public CMy. Class(int i) { Var=i; }. . . 同範例7 -2的第 38~50行. . . } 執行結果: 物件X 物件Y Var=11 Var=7 Var=10

建構子 10 11 12 13 14 15 16 17 18 19 20 21 22

建構子 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 public static void main(String args[]) { CMy. Class X = new CMy. Class(); //實體產生時無引數 CMy. Class Y = new CMy. Class(5, 40); //實體產生有兩個整數引數 CMy. Class Z = new CMy. Class(20. 2, 30. 6); //實體產生有兩個浮點數引數 X. show. Var(); Y. show. Var(); Z. show. Var(); } } class CMy. Class { public double Var. A; private double Var. B; public CMy. Class() { Var. A=10; Var. B=10; } public CMy. Class(int a, int b) { Var. A=a; Var. B=a+b; } //定義無引數的建構函式 //定義兩個整數引數的建構函式

建構子 36 37 38 39 40 41 42 43 44 45 46 public CMy.

建構子 36 37 38 39 40 41 42 43 44 45 46 public CMy. Class(double a, double b) //定義兩個浮點數引數的建構函式 { Var. A=a; Var. B=a*b; } public void show. Var() { System. out. println("Var. A=" + Var. A); System. out. println("Var. B=" + Var. B); } } 執行結果: 範例說明: Var. A=10. 0 Var. B=10. 0 Var. A=5. 0 Var. B=45. 0 Var. A=20. 2 Var. B=618. 12 (1)第 26~40行是 3個建構函式的定義,其署名不相同,符合多載的規 定。並且其內的建構內容也可以不同。

建構子 【觀念範例7 -6】:取消預設建構函式的注意事項 範例7 -6:ch 7_06. java(隨書光碟 my. Javach 07ch 7_06. java) 1 2

建構子 【觀念範例7 -6】:取消預設建構函式的注意事項 範例7 -6:ch 7_06. java(隨書光碟 my. Javach 07ch 7_06. java) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /* 檔名: ch 7_06. java 功能: 預設的建構子 */ package my. Java. ch 07; import java. lang. *; public class ch 7_06 //主類別 { public static void main(String args[]) { CMy. Class X = new CMy. Class(5, 40); //實體產生有兩個整數引數 //CMy. Class Y = new CMy. Class(); //無法找到對應的建構子 X. show. Var(); //Y. show. Var(); } }

建構子 19 20 21 22 23 24 25 26 27 28 29 30 31

建構子 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 class CMy. Class { public int Var. A; private int Var. B; public CMy. Class(int a, int b) { Var. A=a; Var. B=a+b; } //定義兩個整數引數的建構函式 public void show. Var() { System. out. println("Var. A=" + Var. A); System. out. println("Var. B=" + Var. B); } } 執行結果: Var. A=5 Var. B=45

Practice 2 設計一個人事資料類別 Cperson. Data name: string public degree: string public p_id: string private

Practice 2 設計一個人事資料類別 Cperson. Data name: string public degree: string public p_id: string private salary: int private 建立一個無引數建構子,int 設為 0,string 設為 XXXX 建立一個可接受 4 個引數的建構子 show() 函式輸出姓名、p_id 及薪資 由鍵盤輸入資料,並輸出結果 57

物件引數的傳參考�呼叫 1 2 3 4 5 6 7 8 9 10 11 12 13

物件引數的傳參考�呼叫 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 /* 檔名: ch 7_07. java 功能: 傳遞物件與接收物件 */ package my. Java. ch 07; import java. lang. *; public class ch 7_07 //主類別 { public static void main(String args[]) { CVector 2 i = new CVector 2(); i. set(20, 40); CVector 2 j = new CVector 2(); j. set(15, 45); CVector 2 k; //k是CVector 2物件變數, 在第 18行用來接收回傳值 CMy. Class X = new CMy. Class(); k=X. sum(i, j); System. out. println("Vector i=(" + i. x + ", " + i. y + ")"); System. out. println("Vector j=(" + j. x + ", " + j. y + ")"); System. out. println("Vector k=i+j=(" + k. x + ", " + k. y + ")"); } } class CMy. Class { public int sum(int a, int b)

物件引數的傳參考�呼叫 28 29 30 31 32 33 34 35 36 37 38 39 40

物件引數的傳參考�呼叫 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 { return a+b; } public double sum(double a, double b) { return a+b; } public CVector 2 sum(CVector 2 a, CVector 2 b) { CVector 2 temp. Vector = new CVector 2(); temp. Vector. x=a. x+b. x; temp. Vector. y=a. y+b. y; return temp. Vector; } //二維向量的加法成員函式 } class CVector 2 { public int x, y; public void set(int m, int n) { x=m; y=n; } } //二維向量類別 //二維向量的兩項元素資料 //用於設定二維向量的兩項元素資料

this關鍵字 1 2 3 4 5 6 7 8 9 10 11 12 13

this關鍵字 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 /* 檔名: ch 7_09. java 功能: 區域變數與成員變數同名 */ package my. Java. ch 07; import java. lang. *; public class ch 7_09 { //主類別 public static void main(String args[]) { CMy. Class X = new CMy. Class(); X. show(); } } class CMy. Class { public int var=10; //成員變數 public void show() { int var=20; //區域變數 System. out. println("var=" + var); //將會取用到區域變數 } }

this關鍵字 1 2 3 4 5 6 7 8 9 10 11 12 13

this關鍵字 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 /* 檔名: ch 7_10. java 功能: this關鍵字的簡易使用法 */ package my. Java. ch 07; import java. lang. *; public class ch 7_10 { //主類別 public static void main(String args[]) { CMy. Class X = new CMy. Class(); X. show(); } } class CMy. Class { public int var=10; //成員變數 public void show() { int var=20; //區域變數 System. out. println("區域變數var=" + var); System. out. println("成員變數var=" + this. var); } }

this關鍵字 1 2 3 4 5 6 7 8 9 10 11 12 13

this關鍵字 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 /* 檔名: ch 7_11. java 功能: this的內容 */ package my. Java. ch 07; import java. lang. *; public class ch 7_11 { //主類別 public static void main(String args[]) { CMy. Class X = new CMy. Class(); CMy. Class Y = new CMy. Class(); System. out. print("X物件實體所在位址="); X. show_this(); System. out. print("Y物件實體所在位址="); Y. show_this(); } } class CMy. Class { public int var=10; //成員變數 public void show_this()

this關鍵字 1 2 3 4 5 6 7 8 9 10 11 12 13

this關鍵字 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 /* 檔名: ch 7_12. java 功能: 在建構函式中使用this(引數列) */ package my. Java. ch 07; import java. lang. *; public class ch 7_12 //主類別 { public static void main(String args[]) { CMy. Class X = new CMy. Class(3); //實體產生時呼叫第 24行的建構函式 CMy. Class Y = new CMy. Class(5, 40); //實體產生時呼叫第 31行的建構函式 X. show. Var(); Y. show. Var(); } } class CMy. Class { public int Var. A; private int Var. B; public CMy. Class(){} public CMy. Class(int i) { //良好的習慣是補上一個沒有引數的建構函式 //定義一個整數引數的建構函式

this關鍵字 26 27 28 29 30 31 32 33 34 35 36 37 38

this關鍵字 26 27 28 29 30 31 32 33 34 35 36 37 38 39 Var. A=1; Var. B=i; } public CMy. Class(int a, int b) //定義兩個整數引數的建構函式 { this(b); //呼叫第 24行的建構函式, 藉以設定Var. B Var. A=a*b; } public void show. Var() { System. out. println("Var. A=" + Var. A); System. out. println("Var. B=" + Var. B); } 執行結果: } Var. A=1 Var. B=3 Var. A=200 Var. B=40

this關鍵字 1 2 3 4 5 6 7 8 9 10 11 12 13

this關鍵字 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 /* 檔名: ch 7_13. java 功能: 物件的比較 */ package my. Java. ch 07; import java. lang. *; public class ch 7_13 //主類別 { public static void main(String args[]) { CMy. Class X = new CMy. Class(5); CMy. Class Y = new CMy. Class(5); CMy. Class Z = X; System. out. print("物件X與物件Y "); X. compare 2 Obj(Y); System. out. print("物件X與物件Z "); X. compare 2 Obj(Z); } } class CMy. Class { private int Var; public CMy. Class(){} //良好的習慣是補上一個沒有引數的建構函式

this關鍵字 26 27 28 29 30 31 32 33 34 35 36 37 38

this關鍵字 26 27 28 29 30 31 32 33 34 35 36 37 38 public CMy. Class(int i) { Var=i; } //一個整數引數的建構函式 public void compare 2 Obj(CMy. Class Obj) { if(this==Obj) System. out. println("兩物件相等"); else System. out. println("兩物件不相等"); } 執行結果: } 物件X與物件Y 物件X與物件Z 兩物件不相等 兩物件相等

物件陣列 【觀念範例7 -14】:建立一個物件陣列,並透過引數設定,觀 察建構函式的執行狀況。 範例7 -14:ch 7_14. java(隨書光碟 my. Javach 07ch 7_14. java) 1

物件陣列 【觀念範例7 -14】:建立一個物件陣列,並透過引數設定,觀 察建構函式的執行狀況。 範例7 -14:ch 7_14. java(隨書光碟 my. Javach 07ch 7_14. java) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /* 檔名: ch 7_14. java 功能: 物件陣列與建構函式 */ package my. Java. ch 07; import java. lang. *; public class ch 7_14 //主類別 { public static void main(String args[]) { CMy. Class X[] = new CMy. Class[3]; System. out. println("---------"); for(int i=0; i<X. length; i++) X[i] = new CMy. Class()

物件陣列 17 18 19 20 21 22 23 24 25 26 27 28 29

物件陣列 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 CMy. Class Y[] = new CMy. Class[3]; System. out. println("---------"); for(int i=0; i<Y. length; i++) Y[i] = new CMy. Class(i+10); } } class CMy. Class { public int Var. A; private int Var. B; public CMy. Class() //無引數的建構函式 { System. out. println("無引數的建構函式執行中"); } public CMy. Class(int i) { System. out. println("有引數的建構函式執行中, 引數為" + i); } }

物件陣列 1 2 3 4 5 6 7 8 9 10 11 12 13

物件陣列 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 /* 檔名: ch 7_15. java 功能: 傳遞物件陣列與物件配置情形 */ package my. Java. ch 07; import java. lang. *; public class ch 7_15 //主類別 { public static void main(String args[]) { CMy. Class X[] = new CMy. Class[5]; for(int i=0; i<X. length; i++) X[i] = new CMy. Class(); COther. Class Obj = new COther. Class(); Obj. show(X); } } class COther. Class { public void show(CMy. Class X[]) { for(int i=0; i<X. length; i++) System. out. println("物件X[" + i + "]實體的位址在" + X[i]);

物件陣列 傳遞物件陣列 26 27 28 29 30 31 32 33 } } class CMy.

物件陣列 傳遞物件陣列 26 27 28 29 30 31 32 33 } } class CMy. Class { public int Var. A; private int Var. B; } 執行結果: 物件X[0]實體的位址在my. Java. ch 07. CMy. Class@61 de 33 物件X[1]實體的位址在my. Java. ch 07. CMy. Class@14318 bb 物件X[2]實體的位址在my. Java. ch 07. CMy. Class@ca 0 b 6 物件X[3]實體的位址在my. Java. ch 07. CMy. Class@10 b 30 a 7 物件X[4]實體的位址在my. Java. ch 07. CMy. Class@1 a 758 cb 範例說明: (1)第 16行Obj物件呼叫show函式時,將物件陣列當作引數傳入函式 中。