第1章

Size: px
Start display at page:

Download "第1章"

Transcription

1 第 10 章 類別的進階 - 繼承 抽象類別 介面與類別庫 1

2 本章提要 10.1 前言 10.2 繼承 10.3 改寫 10.4 Object 類別是類別之源 10.5 抽象類別 10.6 介面 10.7 內部類別 10.8 類別庫 10.9 綜合練習 後記 2

3 10.1 前言 本章將進ㄧ步來探討類別的進階應用, 包括以下主題 : 繼承 (Inheritance) 改寫 (Overriding) 抽象類別 (Abstract Class) 介面 (Interface) 內部類別 (Inner Class) 類別庫 (Package) 3

4 10.2 繼承 物件導向技術透過 類別的繼承 來達到軟體再用的目的父類別 (Super Classes) 基底類別 (Base Classes) 子類別 (Sub Classes) 衍生類別 (Derived Classes) 子類別可以繼承父類別的資料成員和方法, 並且可以加入自己所須要的資料成員和方法子類別可以建立自己的成員, 也可以存取到父類別裡的非私有 (non-private) 成員, 甚至也可以建立一個新方法來取代從父類別繼承而來的舊方法, 這種現象我們稱之為改寫 (Overriding) 4

5 10.2 繼承 圖 10.1: 類別的繼承 (a) 單一繼承 (b) 多重繼承 5

6 10.2 繼承 採用繼承技巧來撰寫程式 開發資訊系統有以下優點 : 程式碼較為簡潔 縮短開發時程 程式容易維護 6

7 定義子類別 7

8 定義子類別 8

9 定義子類別 9

10 類別繼承範例 範例程式 1 先呼叫父類別的建構元, 然後才呼叫子類別的建構元 2 // 程式名稱 :ch10_inheritance_1.java 6 class Base // 父類別 7 { 8 Base() // 建構元 9 { 10 System.out.println(" 執行父類別建構元 "); 11 } 12 } 14 class Derived extends Base // 子類別 15 { 16 Derived() // 建構元 17 { 18 System.out.println(" 執行子類別建構元 "); 19 } 20 } 10

11 類別繼承範例 22 public class ch10_inheritance_1 // 主程式 23 { 24 public static void main(string args[]) 25 { 26 Base b = new Base(); 27 System.out.println(" "); 28 Derived d = new Derived(); 29 } 30 } 執行結果 執行父類別建構元 執行父類別建構元執行子類別建構元 11

12 類別繼承範例 範例程式 2 方法的繼承, 呼叫父類別的方法, 呼叫子類別的方法 2 // 程式名稱 :ch10_inheritance_2.java 6 class Base // 父類別 7 { 8 Base() // 建構元 9 { 10 // System.out.println(" 執行父類別建構元 "); 11 } void mb() 14 { 15 System.out.println(" 執行父類別的 mb() 方法 "); 16 } 12

13 類別繼承範例 18 public void public_mb() 19 { 20 System.out.println(" 執行父類別的 public_mb() 方法 "); 21 } protected void protected_mb() 24 { 25 System.out.println(" 執行父類別的 protected_mb() 方法 "); 26 } private void private_mb() 29 { 30 System.out.println(" 執行父類別的 private_mb() 方法 "); 31 } 32 } 13

14 類別繼承範例 34 class Derived extends Base // 子類別 35 { 36 Derived() // 建構元 37 { 38 // System.out.println(" 執行子類別建構元 "); 39 } public void public_md() 42 { 43 System.out.println(" 執行子類別的 public_md() 方法 "); 44 this.mb(); 45 this.public_mb(); 46 this.protected_mb(); 47 // this.private_mb(); // 不可繼承 Base 類別的 private 方法 48 } 49 } 14

15 類別繼承範例 51 public class ch10_inheritance_2 // 主程式 52 { 執行結果 53 public static void main(string args[]) 執行父類別的 mb() 方法 54 { 執行父類別的 public_mb() 方法 55 Base b = new Base(); 執行父類別的 protected_mb() 方法 Derived d = new Derived(); 執行子類別的 public_md() 方法 57 d.mb(); 執行父類別的 mb() 方法 58 d.public_mb(); 執行父類別的 public_mb() 方法執行父類別的 protected_mb() 方法 59 d.protected_mb(); 60 // d.private_mb(); // 不可繼承 Base 類別的 private 方法 61 System.out.println(" "); 62 d.public_md(); 63 } 64 } 15

16 類別繼承範例 圖 10.3:Derived 類別繼承了 Base 類別的資料成員和方法 16

17 類別繼承範例 範例程式 3 資料成員的繼承, 呼叫父類別的方法, 呼叫子類別的方法 2 // 程式名稱 :ch10_inheritance_3.java 6 class Base // 父類別 7 { 8 int b1; 9 public int b2; 10 private int b3; 11 protected int b4; Base() // 建構元 14 { 15 // System.out.println(" 執行父類別建構元 "); 16 b1 = b2 = b3 = b4 = 1; 17 } 17

18 類別繼承範例 19 public void show() 20 { 21 System.out.printf("b1=%d, b2=%d, b3=%d, b4=%d\n", b1, b2, b3, b4); 22 } public void setb3(int i) 25 { 26 b3 = i; 27 } 28 } 18

19 類別繼承範例 30 class Derived extends Base // 子類別 31 { 32 int d1; Derived() // 建構元 35 { 36 // System.out.println(" 執行子類別建構元 "); 37 d1 = b1 * 100; 38 } public void print() 41 { 42 this.show(); 43 System.out.println("d1=" + d1); 44 } 19

20 類別繼承範例 46 public void set(int i) 47 { 48 b1 = i; 49 b2 = i; 50 this.setb3(i); // 不可寫成 b3 = i; 51 b4 = i; 52 d1 = i * 100; 53 } 54 } 20

21 類別繼承範例 56 public class ch10_inheritance_3 // 主程式 57 { 58 public static void main(string args[]) 59 { 60 Derived d = new Derived(); 61 d.show(); // 也可以用 d.show() 直接呼叫 Base 類別的 show() 方法 62 System.out.println(" "); 63 d.print(); 執行結果 64 d.set(5); 65 System.out.println(" "); b1=1, b2=1, b3=1, b4= d.print(); b1=1, b2=1, b3=1, b4=1 67 } d1= } b1=5, b2=5, b3=5, b4=5 d1=500 21

22 類別繼承範例 圖 10.3:Derived 類別繼承了 Base 類別的資料成員和方法 22

23 使用 super() 來呼叫父類別的建構元 用子類別來產生物件時, 會先呼叫父類別的建構元, 然後才呼叫子類別的建構元 當父類別裡沒有建構元時, 表示將採用預設建構元 ( 即沒有參數的建構元 ) 當父類別裡有數個建構元時, 若子類別沒有特別指定, 則內定是呼叫父類別的預設建構元 若父類別裡有數個建構元, 那麼在子類別中可以用 super() 來指定所要的建構元 super() 敘述必須放在建構元程式區塊的第一行 23

24 使用 super() 來呼叫父類別的建構元 範例程式 4 使用 super() 呼叫父類別的建構元 2 // 程式名稱 :ch10_super_1.java 6 class Base // 父類別 7 { 8 int b; 9 10 Base() // 這裡必須要有一個沒有參數的建構元, 以供 Derived() 呼叫 11 { 12 System.out.println(" 執行父類別建構元 Base()"); 13 b = 1; 14 } 15 24

25 使用 super() 來呼叫父類別的建構元 16 Base(int i) // 建構元 17 { 18 System.out.println(" 執行父類別建構元 Base(int i)"); 19 b = i; 20 } 21 } class Derived extends Base // 子類別 24 { 25 int d; Derived() // 建構元 28 { 29 System.out.println(" 執行子類別建構元 "); 30 d = 2; 31 } 25

26 使用 super() 來呼叫父類別的建構元 33 Derived(int i) // 建構元 34 { 35 super(i); // super() 敘述必須放在建構元程式碼的第一行 36 d = i; 37 System.out.println(" 執行子類別建構元 "); 38 } 執行結果 39 } 執行父類別建構元 Base() 41 public class ch10_super_1 // 主程式執行子類別建構元 42 { d1.b=1, d1.d=2 43 public static void main(string args[]) 執行父類別建構元 Base(int i) 44 { 執行子類別建構元 d2.b=3, d2.d=3 45 Derived d1 = new Derived(); 46 System.out.println("d1.b=" + d1.b + ", d1.d=" + d1.d); 47 Derived d2 = new Derived(3); 48 System.out.println("d2.b=" + d2.b + ", d2.d=" + d2.d); 49 } 50 } 26

27 類別階層 圖 10.4: 類別階層圖 27

28 類別階層 範例程式 5 類別階層, 必須先呼叫父類別的建構元 2 // 程式名稱 :ch10_classhierarchy.java 6 class Vehicle 7 { 8 Vehicle() 9 { 10 System.out.println(" 執行 Vehicle 建構元 "); 11 } 12 } 14 class Car extends Vehicle 15 { 16 Car() 17 { 18 System.out.println(" 執行 Car 建構元 "); 19 } 20 } 28

29 類別階層 22 class Taxi extends Car 23 { 24 Taxi() 25 { 26 System.out.println(" 執行 Taxi 建構元 "); 27 } 28 } class Bus extends Car 31 { 32 Bus() 33 { 34 System.out.println(" 執行 Bus 建構元 "); 35 } 36 } 29

30 類別階層 38 public class ch10_classhierarchy 39 { 40 public static void main(string args[]) 41 { 42 Car car = new Car(); 43 System.out.println(" "); 44 Taxi taxi = new Taxi(); 45 System.out.println(" "); 46 Bus bus = new Bus(); 47 } 48 } 執行結果 執行 Vehicle 建構元執行 Car 建構元 執行 Vehicle 建構元執行 Car 建構元執行 Taxi 建構元 執行 Vehicle 建構元執行 Car 建構元執行 Bus 建構元 30

31 繼承與包含於 繼承是一個 屬於 (Is a) 的關係, 例如圖 10.4 中, 汽車 是 運輸工具 的子類別, 它隱含兩個意義 : 1. 汽車可以繼承運輸工具的資料成員和成員方法 2. 汽車屬於一種運輸工具除了繼承之外, 類別與類別間的關係也可能是一種 包含於 (Has a) 的關係下面這個例子中,A 類別的 a 物件包含於 B 類別之中, 換言之,a 物件是 B 類別的一部份 31

32 繼承與包含於 範例程式 6 類別間的包含於 (Has a) 的關係 2 // 程式名稱 :ch10_has_a.java 6 class A 7 { 8 A() 9 { 10 System.out.println(" 執行 A 別的建構元 "); 11 } 12 public void ma() 13 { 14 System.out.println(" 執行 A 類別的 ma() 方法 "); 15 } 16 } 32

33 繼承與包含於 18 class B 19 { 20 A a; // A 類別的 a 物件包含於 B 類別之中, 是 B 類別的一部份 B() 23 { 24 System.out.println(" 執行 B 別的建構元 "); 25 a = new A(); // 在 B 類別裡面產生一個 A 類別的物件 26 // mb(); 可以直接執行 mb() 方法 27 } public void mb() 30 { 31 System.out.println(" 執行 B 類別的 mb() 方法 "); 32 a.ma(); 33 // ma(); 不可以直接執行 mb() 方法 34 } 35 } 33

34 繼承與包含於 37 public class ch10_has_a 38 { 39 public static void main(string args[]) 40 { 41 B b = new B(); 42 b.mb(); 43 // a.ma(); // 錯誤的用法 44 } 執行結果 45 } 執行 B 別的建構元執行 A 別的建構元執行 B 類別的 mb() 方法執行 A 類別的 ma() 方法 34

35 extends 只能單一繼承 不可以寫成 : class Derived extends Base1,Base2 {... } 35

36 多型 多載與改寫 多型 (Polymorphism)( 或稱同名異式 ) 是物件導向的特性之一, 顧名思義, 它指的是採用同樣的方法名稱, 但在不同場合扮演不同的角色多型可以用下列幾種技術來實踐 : 多載 (9.6.6 節 ) 改寫 (10.3 節 ) 抽象類別與抽象方法的實作 (10.5 節 ) 介面的定義與實作 (10.6 節 ) 36

37 多型 多載與改寫 改寫與多載之比較 改寫 (Overriding) 發生在子類別 方法名稱相同 方法的參數個數 資料型別 傳回值都和父類別裡的方法相同 多載 (Overloading) 發生在同一個類別裡 方法名稱相同 方法的參數個數或資料型別有所差異 37

38 方法的改寫 範例程式 7 改寫與多載 2 // 程式名稱 :ch10_overriding.java 6 class Car 7 { 8 Car(){} 9 10 public void drive() // 預設 Car 為自排車 11 { 12 System.out.println(" 開自排車, 不須換擋 "); 13 } 14 } class Taxi extends Car 17 { 18 Taxi(){} 19 } 38

39 方法的改寫 21 class Bus extends Car 22 { 23 Bus(){} public void drive() // 改寫 Car 類別的 drive() 26 { 27 System.out.println(" 開手排 Bus, 必須換擋 "); 28 } public void drive(string s) // 多載 31 { 32 System.out.print("Bus 為 " + s + ","); 33 if(s == " 自排 ") 34 super.drive(); // 呼叫父類別的 drive() 35 else if(s == " 手排 ") 36 System.out.println(" 開手排 Bus, 必須換擋 "); 37 } 38 } 39

40 方法的改寫 40 public class ch10_overriding 41 { 42 public static void main(string args[]) 43 { 44 Taxi taxi = new Taxi(); 45 taxi.drive(); Bus bus = new Bus(); 48 bus.drive(); 49 bus.drive(" 自排 "); 50 bus.drive(" 手排 "); 執行結果 51 } 開自排車, 不須換擋 52 } 開手排 Bus, 必須換擋 Bus 為自排, 開自排車, 不須換擋 Bus 為手排, 開手排 Bus, 必須換擋 40

41 以父類別的物件變數呼叫子類別的方法 範例程式 8 用父類別的物件變數來呼叫子類別之方法 2 // 程式名稱 :ch10_overriding_1.java 6 class Vehicle 7 { 8 Vehicle(){} 9 10 public void start() 11 { 12 System.out.println(" 發動引擎 "); 13 } 14 } 41

42 以父類別的物件變數呼叫子類別的方法 16 class Car extends Vehicle 17 { 18 Car(){} public void drive() 21 { 22 System.out.println(" 開自排車, 不須換擋 "); 23 } 24 } 26 class Taxi extends Car 27 { 28 Taxi(){} public void drive() 31 { 32 System.out.println(" 開自排 Taxi, 不須換擋 "); 33 } 34 } 42

43 以父類別的物件變數呼叫子類別的方法 36 class Bus extends Car 37 { 38 Bus(){} public void drive() 41 { 42 System.out.println(" 開手排 Bus, 必須換擋 "); 43 } 44 } 43

44 以父類別的物件變數呼叫子類別的方法 46 public class ch10_overriding_1 47 { 48 public static void main(string args[]) 49 { 50 Taxi taxi = new Taxi(); 執行結果 51 taxi.start(); 發動引擎 52 taxi.drive(); 開自排 Taxi, 不須換擋 53 發動引擎 54 Car car = new Bus(); 開手排 Bus, 必須換擋 55 car.start(); 56 car.drive(); // 可以用父類別的物件變數來呼叫子類別之方法 57 } 58 } 44

45 動態方法分派 範例程式 9 動態方法分派 2 // 程式名稱 :ch10_dynamicmd.java 6 class Car 7 { 8 Car(){} 9 10 public void drive() 11 { 12 System.out.println(" 開自排車, 不須換擋 "); 13 } 14 } 15 45

46 動態方法分派 16 class Taxi extends Car 17 { 18 Taxi(){} public void drive() 21 { 22 System.out.println(" 開自排 Taxi, 不須換擋 "); 23 } 24 } 26 class Bus extends Car 27 { 28 Bus(){} public void drive() 31 { 32 System.out.println(" 開手排 Bus, 必須換擋 "); 33 } 46

47 動態方法分派 36 public class ch10_dynamicmd 37 { 38 public static void main(string args[]) 39 { 40 Car x; 41 Car car = new Car(); 42 Taxi taxi = new Taxi(); 43 Bus bus = new Bus(); 45 x = car; 46 x.drive(); 執行結果 48 x = taxi; 開自排車, 不須換擋 49 x.drive(); 開自排 Taxi, 不須換擋 51 x = bus; 開手排 Bus, 必須換擋 52 x.drive(); 53 } 54 } 47

48 使用 final 來禁止改寫 範例程式 10 使用 final 來禁止改寫 2 // 程式名稱 :ch10_overriding_f1.java 6 class Car 7 { 8 Car(){} 9 10 final public void drive() // 使用 final 來禁止改寫 11 { 12 System.out.println(" 開自排車, 不須換擋 "); 13 } 14 } 15 48

49 使用 final 來禁止改寫 16 class Bus extends Car 17 { 18 Bus(){} public void drive() // 不可改寫 Car 類別的 drive() 21 { 22 System.out.println(" 開手排車, 必須換擋 "); 23 } 24 } 25 49

50 使用 final 來禁止改寫 26 public class ch10_overriding_f1 27 { 28 public static void main(string args[]) 29 { 30 Bus bus = new Bus(); 31 bus.drive(); 32 } 33 } 50

51 使用 final 來禁止繼承 範例程式 11 使用 final 來停止繼承 2 // 程式名稱 :ch10_overriding_f2.java 6 final class Car 7 { 8 Car(){} 9 10 public void drive() 11 { 12 System.out.println(" 開自排車, 不須換擋 "); 13 } 14 } 51

52 使用 final 來禁止繼承 16 class Bus extends Car // 不可繼承 Car 類別 17 { 18 Bus(){} public void drive() 21 { 22 System.out.println(" 開手排車, 必須換擋 "); 23 } 24 } 26 public class ch10_overriding_f2 27 { 28 public static void main(string args[]) 29 { 30 Bus bus = new Bus(); 31 bus.drive(); 32 } 33 } 52

53 使用 final 來禁止繼承 53

54 10.4 Object 類別是類別之源 圖 10.5: 所有類別都繼承自 Object 類別 54

55 10.4 Object 類別是類別之源 55

56 10.4 Object 類別是類別之源 範例程式 12 Object 類別,getClass() 方法, getsuperclass() 方法 2 // 程式名稱 :ch10_object.java 6 class Car 7 { 8 Car(){} 9 } class Taxi extends Car 12 { 13 Taxi(){} 14 } 執行結果 car1 所指的物件是屬於 class Car car2 所指的物件是屬於 class Taxi taxi 所指的物件是屬於 class Taxi Taxi 類別的父類別是 class Car Taxi 類別的父類別是 class Car 56

57 10.4 Object 類別是類別之源 16 public class ch10_object 17 { 18 public static void main(string args[]) 19 { 20 Car car1 = new Car(); 21 System.out.println("car1 所指的物件是屬於 " + car1.getclass()); 23 Car car2 = new Taxi(); 24 System.out.println("car2 所指的物件是屬於 " + car2.getclass()); 26 Taxi taxi = new Taxi(); 27 Class classname = taxi.getclass(); 28 System.out.println("taxi 所指的物件是屬於 " + classname); 30 Class superclassname = taxi.getclass().getsuperclass(); 31 System.out.println("Taxi 類別的父類別是 " + superclassname); 32 System.out.println("Taxi 類別的父類別是 " + 33 classname.getsuperclass()); 34 } 35 } 57

58 抽象類別與抽象方法 抽象類別是一個很特殊的父類別, 在抽象類別裡可以定義抽象方法, 然後要求繼承它的子類別一定要重新撰寫程式碼來取代父類別裡的抽象方法抽象類別用來定義一個範本, 然後強迫子類別依照這個範本來實作程式碼這裡的範本指的是抽象方法的定義, 包括傳回值資料型別 方法名稱 參數列等, 而並不包括程式碼的實作 58

59 抽象類別與抽象方法 圖 10.7: 抽象類別與抽象方法 59

60 定義抽象類別 不能直接用抽象類別來建立物件, 而是要透過抽象類別的子類別來建立物件抽象類別裡的抽象方法不可以宣告為 private 60

61 抽象類別的實作 範例程式 13 抽象類別 2 // 程式名稱 :ch10_abstract_1.java 6 abstract class Car 7 { 8 int cc; 9 10 int getcc() 11 { 12 return cc; 13 } abstract void drive(); // 只有定義, 沒有實作 16 } 61

62 抽象類別的實作 18 class Taxi extends Car 19 { 20 Taxi(int ccno) 21 { 22 cc = ccno; 23 } 25 void drive() // 實作 26 { 27 System.out.println("Taxi 為 " + getcc() + "cc 的自排車, 不須換擋 "); 28 } 29 } 31 class Bus extends Car 32 { 33 void drive() // 實作 34 { 35 System.out.println("Bus 為手排車, 必須換擋 "); 36 } 37 } 62

63 抽象類別的實作 39 public class ch10_abstract_1 40 { 41 public static void main(string args[]) 42 { 43 // Car car = new Car(); // Car 是抽象類別, 不可用來產生物件 44 // car.drive(); 45 Taxi taxi = new Taxi(2000); 46 taxi.drive(); 47 Bus bus = new Bus(); 48 bus.drive(); 49 } 50 } 執行結果 Taxi 為 2000cc 的自排車, 不須換擋 Bus 為手排車, 必須換擋 63

64 抽象類別的實作 範例程式 14 抽象類別, 子類別也是抽象類別 2 // 程式名稱 :ch10_abstract_2.java 6 abstract class Car 7 { 8 abstract void drive(string obj); // 只有定義, 沒有實作 9 } abstract class Bus extends Car 12 { 13 } 執行結果 newbus 為單軌自動電車, 不須駕駛 car 為單軌自動電車, 不須駕駛 64

65 抽象類別的實作 15 class NewBus extends Bus 16 { 17 void drive(string obj) // 實作 18 { 19 System.out.println(obj + " 為單軌自動電車, 不須駕駛 "); 20 } 23 public class ch10_abstract_2 21 } 24 { 25 public static void main(string args[]) 26 { 27 Car newbus = new NewBus(); 28 newbus.drive("newbus"); // 父類別的變數 (car) 可以指向孫類別 (NewBus) 的物件 31 Car car = new NewBus(); 32 car.drive("car"); 33 } 34 } 65

66 10.6 介面 (a) 使用 extends (b) 使用 interface/implements 圖 10.8: 多重繼承的兩種實作方式 66

67 介面的定義與實作 final 和 abstract 是預設的, 可以省略 67

68 介面的定義與實作 在子類別裡實作介面的抽象方法時, 該方法必須宣告為 public 68

69 介面的定義與實作 範例程式 15 介面的定義與實作 2 // 程式名稱 :ch10_interface_1.java 6 interface ICar 7 { 8 final String color = " 黃色 "; 9 abstract void passenger(); // 只有定義, 沒有實作 10 } 69

70 介面的定義與實作 12 class Taxi implements ICar 13 { 14 int cc; Taxi(int cc) 17 { 18 this.cc = cc; 19 } public void passenger() // 實作 22 { 23 System.out.println(" 計程車是 " + color + "," + cc + 24 "cc, 可以載 4 名乘客 "); 25 } 26 } 70

71 介面的定義與實作 28 class Bus implements ICar 29 { 30 public void passenger() // 實作 31 { 32 System.out.println(" 校車是 " + color + ", 可以載 50 名乘客 "); 33 } 34 } 36 public class ch10_interface_1 37 { 38 public static void main(string args[]) 39 { 40 Taxi taxi = new Taxi(2000); 執行結果 41 taxi.passenger(); 計程車是黃色,2000cc, 可以載 4 名乘客 42 Bus bus = new Bus(); 校車是黃色, 可以載 50 名乘客 43 bus.passenger(); 44 } 45 } 71

72 使用介面來處理多重繼承 圖 10.9: 多重繼承 72

73 使用介面來處理多重繼承 範例程式 16 多重繼承 2 // 程式名稱 :ch10_interface_2.java 6 interface IFather 7 { 8 final String lastname = " 張 "; // 姓氏 9 abstract void character(string c); // 性格 10 } interface IMother 13 { 14 final String lastname = " 李 "; // 姓氏 15 abstract void hobby(string h); // 嗜好 16 } 73

74 使用介面來處理多重繼承 18 class Child implements IFather,IMother 19 { 20 String lastname; // 姓氏 21 String id; // 身分證字號 22 String character; // 性格 23 String hobby; // 嗜好 Child(String name, String id) 26 { 27 this.lastname = IFather.lastname + name; 28 this.id = id; 29 } 74

75 使用介面來處理多重繼承 31 public void show() 32 { 33 System.out.println(lastname + " 的母親姓 " + IMother.lastname); 34 System.out.print(lastname + " 的身分證字號為 " + id + ", 擁有 "); 35 System.out.println(character + " 的性格和 "+ hobby + " 的嗜好 "); 36 } public void character(string chr) // 實作性格 39 { 40 character = chr; 41 } public void hobby(string h) // 實作嗜好 44 { 45 hobby = h; 46 } 47 } 75

76 使用介面來處理多重繼承 49 public class ch10_interface_2 50 { 51 public static void main(string args[]) 52 { 53 Child child = new Child(" 三 ","A "); 54 child.character(" 樂觀開朗 "); 55 child.hobby(" 打籃球 "); 56 child.show(); 57 } 58 } 執行結果 張三的母親姓李張三的身分證字號為 A , 擁有樂觀開朗的性格和打籃球的嗜好 76

77 介面的繼承 77

78 介面的繼承 範例程式 17 介面的繼承 2 // 程式名稱 :ch10_interface_3.java 6 interface IFamily 7 { 8 abstract void show(); // 列印 9 } interface IFather extends IFamily 12 { 13 final String lastname = " 張 "; // 姓氏 14 abstract void character(string c); // 性格 15 } 78

79 介面的繼承 17 class Child implements IFather 18 { 19 String lastname; // 姓氏 20 String id; // 身分證字號 21 String character; // 性格 Child(String name, String id) 24 { 25 this.lastname = IFather.lastname + name; 26 this.id = id; 27 } public void show() // 實作列印 30 { 31 System.out.print(lastname + " 的身分證字號為 " + id + ", 擁有 "); 32 System.out.println(character + " 的性格 "); 33 } 79

80 介面的繼承 35 public void character(string chr) // 實作性格 36 { 37 character = chr; 38 } 39 } public class ch10_interface_3 42 { 43 public static void main(string args[]) 44 { 45 Child child = new Child(" 三 ","A "); 46 child.character(" 樂觀開朗 "); 47 child.show(); 48 } 執行結果 49 } 張三的身分證字號為 A , 擁有樂觀開朗的性格 80

81 10.7 內部類別 如果在 A 類別程式區塊裡面又定義了一個 B 類別, 那麼我們稱 B 類別為內部類別 (Inner Class), 而稱 A 類別為外部類別 (Outer Class) 我們可以將內部類別視為外部類別的成員, 可以再 A 類別裡產生一個 B 類別的物件 81

82 內部類別之定義 82

83 內部類別之定義 範例程式 18 Square 類別 ( 正方形類別 ) 2 // 程式名稱 :ch10_square_1.java 6 class Square 7 { 8 int x; 10 Square(int x) 11 { 12 this.x = x; 13 } 15 public int getarea() 16 { 17 return x*x; 18 } 19 } 83

84 內部類別之定義 21 public class ch10_square_1 22 { 23 public static void main(string args[]) 24 { 25 int x = 5; 26 Square s = new Square(x); System.out.printf(" 邊長為 %d 的正方形, 其面積為 %d\n", x, s.getarea()); 29 } 30 } 執行結果 邊長為 5 的正方形, 其面積為 25 這支程式有 ch10_square_1 和 Square 兩個類別, 只要將 Square 類別 ( 第 6-19 行 ) 搬移到第 22 行之後, 就成為內部類別的形式了 84

85 內部類別之定義 範例程式 20 透過外部類別的物件來呼叫內部類別裡的方法 2 // 程式名稱 :ch10_inner_2.java 6 public class ch10_inner_2 // 外部類別 7 { 8 ch10_inner_2(int x) // 外部類別的建構元 9 { 10 Square s = new Square(x); 11 s.getarea(); 12 } 13 85

86 內部類別之定義 14 class Square // 內部類別, 這種寫法內部類別可以不必宣告為 static 15 { 16 int x; 18 Square(int x) // 建構元 19 { 執行結果 20 this.x = x; 邊長為 5 的正方形, 其面積為 } 23 public void getarea() 24 { 25 System.out.printf(" 邊長為 %d 的正方形, 其面積為 %d\n", x, x*x); 26 } 27 } 29 public static void main(string args[]) // 主程式 30 { 31 int x = 5; 32 ch10_inner_2 inner_2 = new ch10_inner_2(x); 33 } 34 } 86

87 內部類別之定義 範例程式 21 將外部類別獨立於主程式之外 2 // 程式名稱 :ch10_inner_3.java 6 class Outer // 外部類別 7 { 8 Outer(int x) // 外部類別的建構元 9 { 10 Square s = new Square(x); 11 s.getarea(); 12 } 13 87

88 內部類別之定義 14 class Square // 內部類別, 這種寫法內部類別可以不必宣告為 static 15 { 16 int x; Square(int x) // 建構元 19 { 20 this.x = x; 21 } public void getarea() 24 { 25 System.out.printf(" 邊長為 %d 的正方形, 其面積為 %d\n", x, x*x); 26 } 27 } 28 } 88

89 內部類別之定義 30 public class ch10_inner_3 31 { 32 public static void main(string args[]) // 主程式 33 { 34 int x = 5; 35 Outer o = new Outer(x); 36 } 37 } 執行結果 邊長為 5 的正方形, 其面積為 25 89

90 巢狀類別之定義 類別內部又有一個類別成員, 就成了巢狀類別從外部類別呼叫內部類別方法的格式為 : 內部類別物件. 內部類別方法名稱 () 從外部類別存取內部類別的資料成員的格式為 : 內部類別物件. 內部類別資料成員名稱外部類別可以透過內部類別物件來存取內部類別的 private 成員 90

91 巢狀類別之定義 範例程式 21 將外部類別獨立於主程式之外 2 // 程式名稱 :ch10_inner_4.java 6 class Outer // 外部類別 7 { 8 Square s; // 內部類別變數 9 10 Outer(int x) // 外部類別建構元 11 { 12 s = new Square(x); 13 } public void show() // 外部類別方法 16 { 17 s.getarea(); 18 } 91

92 巢狀類別之定義 20 class Square // 內部類別, 這種寫法內部類別可以不必須宣告為 static 21 { 22 int x; Square(int x) // 內部類別建構元 25 { 26 this.x = x; 27 } private void getarea() // 內部類別方法 30 { 31 System.out.printf(" 邊長為 %d 的正方形, 其面積為 %d\n", x, x*x); 32 } 33 } 34 } 92

93 巢狀類別之定義 36 public class ch10_inner_4 37 { 38 public static void main(string args[]) // 主程式 39 { 40 int x = 5; 41 Outer o = new Outer(x); 42 o.show(); 43 // o.getarea(); 這行敘述是錯誤的用法, 必須改為備註 44 } 45 } 執行結果 邊長為 5 的正方形, 其面積為 25 93

94 巢狀類別之定義 範例程式 23 巢狀類別, 內部類別就沒有成員函式 2 // 程式名稱 :ch10_inner_5.java 6 class Outer // 外部類別 7 { 8 Square s; // 內部類別變數 9 10 Outer(int x) // 外部類別建構元 11 { 12 s = new Square(x); 13 } public void show() // 外部類別方法 16 { 17 getarea(); 18 } 94

95 巢狀類別之定義 20 public void getarea() // 外部類別方法 21 { 22 System.out.printf(" 邊長為 %d 的正方形, 其面積為 %d\n", s.x, s.x*s.x); 23 } class Square // 內部類別, 這種寫法內部類別可以不必須宣告為 static 26 { 27 int x; Square(int x) // 內部類別建構元 30 { 31 this.x = x; 32 } 33 } 34 } 95

96 巢狀類別之定義 36 public class ch10_inner_5 37 { 38 public static void main(string args[]) // 主程式 39 { 40 int x = 5; 41 Outer o = new Outer(x); 42 o.show(); 43 o.getarea(); 44 } 45 } 執行結果 邊長為 5 的正方形, 其面積為 25 邊長為 5 的正方形, 其面積為 25 96

97 匿名內部類別之定義 97

98 匿名內部類別之定義 範例程式 24 匿名內部類別 2 // 程式名稱 :ch10_anonymousinner_1.java 6 class Outer // 外部類別 7 { 8 Outer(int x) 9 { 10 ( // 匿名內部類別 11 new Square(x) // 建立匿名內部類別物件 12 { 13 public void getarea() 14 { 15 System.out.printf(" 邊長為 %d 的正方形, 其面積為 %d\n", x, x*x); 16 } 17 } 18 ).getarea(); // 呼叫匿名類別裡的方法 19 } 20 } 98

99 匿名內部類別之定義 22 class Square 23 { 24 int x; Square(int x) 27 { 28 this.x = x; 執行結果 29 } 30 } 邊長為 5 的正方形, 其面積為 public class ch10_anonymousinner_1 33 { 34 public static void main(string args[]) 35 { 36 int x = 5; 37 Outer s = new Outer(x); 38 } 39 } 99

100 匿名內部類別之定義 範例程式 25 匿名內部類別 2 // 程式名稱 :ch10_anonymousinner_2.java 6 class Outer // 外部類別 7 { 8 Outer(int x) 9 { 10 ( // 匿名內部類別 11 new Square(x) // 建立匿名內部類別物件 12 { 13 public void getarea() 14 { 15 System.out.printf(" 邊長為 %d 的正方形, 其面積為 %d", x, x*x); 16 } 17 } 18 ).getarea(); // 呼叫匿名類別裡的方法 19 } 100

101 匿名內部類別之定義 21 class Square 22 { 23 int x; Square(int x) 26 { 27 this.x = x; 28 } 29 } 執行結果 30 } 邊長為 5 的正方形, 其面積為 public class ch10_anonymousinner_2 33 { 34 public static void main(string args[]) 35 { 36 int x = 5; 37 Outer s = new Outer(x); 38 } 39 } 101

102 匿名內部類別之定義 範例程式 25 匿名內部類別 10 ( // 匿名內部類別 11 new Square(x) // 建立匿名內部類別物件 12 { 13 public void getarea() 14 { 15 System.out.printf(" 邊長為 %d 的正方形, 其面積為 %d", x, x*x); 16 } 17 } 18 ).getarea(); // 呼叫匿名類別裡的方法 19 } 10 (new Square(x){public void getarea(){ 11 System.out.printf(" 邊長為 %d 的正方形, 其面積為 %d", x, x*x);}} 12 ).getarea(); 102

103 類別庫的觀念 大型資訊系統的開發通常須要許多人同心協力共同合作來完成, 將整個系統分成許多子系統, 再將子系統分成許多功能項目, 然後針對功能項目分別進行程式的撰寫工作系統分析師 ( 或設計師 ) 也會事先規劃出須要哪些程式檔, 程式檔裡應有哪些類別, 並且規定好類別檔 (.class) 要存放到哪一個類別庫, 然後才交由程式設計師來撰寫程式程式設計師須依規定將程式編譯後產生的類別檔放置到指定的類別庫 (Package) 裡, 等所有的程式都完成後須進行整合, 以成為一個完整的資訊系統類別庫就像檔案夾 ( 或稱為目錄 ), 編譯產生的類別檔可以存放到指定的類別庫, 另外, 也可以從指定的類別庫找到所須的類別檔來重複使用類別庫也稱為套件 103

104 將類別檔存放到指定的類別庫 假設已經有一支程式 ch10_package_1.java 儲存檔案夾 ( 目錄 )C:\java\ch10\pack1 裡, 我們希望編譯該程式後所產生的類別檔也存放於 C:\java\ch10\pack1 檔案夾裡, 那麼只須在程式的開頭加上一行敘述 : package pack1; 用這行敘述來告訴編譯器, 將類別檔存放到現行目錄 (C:\java\ch10\) 下的 pack1 這個類別庫裡 104

105 將類別檔存放到指定的類別庫 範例程式 26 將類別檔存放到指定的類別庫 2 // 程式名稱 :ch10_package_1.java 6 package pack1; 7 class Car 8 { 9 Car(){} public void drive() // 預設 Car 為字排車 12 { 13 System.out.println(" 開自排車, 不須換擋 "); 14 } 15 } 105

106 將類別檔存放到指定的類別庫 17 public class ch10_package_1 18 { 19 public static void main(string args[]) 20 { 21 Car car = new Car(); 22 car.drive(); 23 } 24 } 106

107 將類別檔存放到指定的類別庫 107

108 將程式檔分割, 並將類別檔存放到指定的類別庫 檔案夾 C:\java\ch10\pack2 :ch10_package_21.java 檔案夾 C:\java\ch10\pack2 :ch10_package_22.java 108

109 將程式檔分割, 並將類別檔存放到指定的類別庫 範例程式 27-1 將程式檔分割, 並將類別檔存放到指定的類別庫 2 // 程式名稱 :ch10_package_21.java 6 package pack2; 7 public class ch10_package_21 8 { 9 public static void main(string args[]) 10 { 11 Car car = new Car(); 12 car.drive(); 13 } 14 } 109

110 將程式檔分割, 並將類別檔存放到指定的類別庫 範例程式 27-2 將程式檔分割, 並將類別檔存放到指定的類別庫 2 // 程式名稱 :ch10_package_22.java 6 package pack2; 7 class Car 8 { 9 Car(){} public void drive() // 預設 Car 為字排車 12 { 13 System.out.println(" 開自排車, 不須換擋 "); 14 } 15 } 110

111 將程式檔分割, 並將類別檔存放到指定的類別庫必須先編譯 ch10_package_22.java 然後才編譯 ch10_package_21.java 111

112 如何取用不同類別庫裡的類別檔 檔案夾 C:\java\ch10\pack3\pack31 : ch10_package_31.java 檔案夾 C:\java\ch10\pack3\pack32 :Car.java 112

113 如何取用不同類別庫裡的類別檔 範例程式 28-1 取用不同類別庫裡的類別檔 2 // 程式名稱 :ch10_package_31.java 6 package pack31; 7 public class ch10_package_31 8 { 9 public static void main(string args[]) 10 { 11 pack32.car car = new pack32.car(); 12 car.drive(); 13 } 14 } 113

114 如何取用不同類別庫裡的類別檔 範例程式 28-2 將類別檔存放到指定的類別庫 2 // 程式名稱 :Car.java 6 package pack32; 7 public class Car 8 { 9 public Car(){} public void drive() // 預設 Car 為字排車 12 { 13 System.out.println(" 開自排車, 不須換擋 "); 14 } 15 } 114

115 如何用 import 來取用不同類別庫裡的類別檔 檔案夾 C:\java\ch10\pack4\pack41 : ch10_package_41.java 檔案夾 C:\java\ch10\pack4\pack42 :Car.java import 類別庫名稱. 類別名稱 ; 115

116 如何用 import 來取用不同類別庫裡的類別檔 範例程式 29-1 用 import 來取用不同類別庫裡的類別檔 2 // 程式名稱 :ch10_package_41.java 6 package pack41; 7 import pack42.car; 8 public class ch10_package_41 9 { 10 public static void main(string args[]) 11 { 12 Car car = new Car(); 13 car.drive(); 14 } 15 } 116

117 如何用 import 來取用不同類別庫裡的類別檔 範例程式 29-2 將類別檔存放到指定的類別庫 2 // 程式名稱 :Car.java 6 package pack42; 7 public class Car 8 { 9 public Car(){} public void drive() // 預設 Car 為字排車 12 { 13 System.out.println(" 開自排車, 不須換擋 "); 14 } 15 } 117

118 如何用 import 來取用子類別庫裡的類別檔 Import 類別庫名稱. 子類別庫名稱. 類別名稱 ; 檔案夾 C:\java\ch10\pack5\ :ch10_package_5.java 檔案夾 C:\java\ch10\pack5\pack51 :Car.java 檔案夾 C:\java\ch10\pack5\pack52 :Bus.java 118

119 如何用 import 來取用子類別庫裡的類別檔 範例程式 30-1 用 import 來取用子類別庫裡的類別檔 2 // 程式名稱 :ch10_package_5.java 6 package pack5; 7 import pack5.pack51.car; 8 import pack5.pack52.bus; 9 public class ch10_package_5 10 { 11 public static void main(string args[]) 12 { 13 Car car = new Car(); 14 car.drive(); 16 Bus bus = new Bus(); 17 bus.drive(); 18 bus.drive(" 自排 "); 19 bus.drive(" 手排 "); 20 } 21 } 119

120 如何用 import 來取用子類別庫裡的類別檔 範例程式 30-2 將類別檔存放到指定的類別庫 2 // 程式名稱 :Car.java 6 package pack5.pack51; 7 public class Car 8 { 9 public Car(){} public void drive() // 預設 Car 為字排車 12 { 13 System.out.println(" 開自排車, 不須換擋 "); 14 } 15 } 120

121 如何用 import 來取用子類別庫裡的類別檔 範例程式 30-3 用 import 來取用子類別庫裡的類別檔 2 // 程式名稱 :Bus.java 6 package pack5.pack52; 7 import pack5.pack51.car; 8 public class Bus extends Car 9 { 10 public Bus(){} public void drive() // 改寫 Car 類別的 drive() 13 { 14 System.out.println(" 開手排 Bus, 必須換擋 "); 15 } 121

122 如何用 import 來取用子類別庫裡的類別檔 17 public void drive(string s) // 多載 18 { 19 System.out.print("Bus 為 " + s + ","); 20 if(s == " 自排 ") 21 super.drive(); // 呼叫父類別的 drive() 22 else if(s == " 手排 ") 23 System.out.println(" 開手排 Bus, 必須換擋 "); 24 } 25 } 122

123 排序 氣泡排序法 10.9 綜合練習 排序 - 介面的應用 氣泡排序法, 介面的應用 123

124 10.10 後記 物件導向技術透過 類別的繼承 來達到軟體再用的目的 子類別可以繼承父類別的資料成員和方法, 並且可以加入自己所須要的資料成員和方法 子類別可以建立自己的成員, 也可以存取到父類別裡的非私有 (non-private) 成員, 甚至也可以建立一個新方法來取代從父類別繼承而來的舊方法, 這種現象我們稱之為改寫在 Java 裡, 定義類別時用 extends 來處理單一繼承, 而 Interface 用來實作多重繼承 124

125 10.10 後記 父類別中, 宣告為 public protected 和沒有指定修飾子的成員是可以被子類別所繼承 子類別無法存取父類別的 private 成員, 除非是透過父類別提供的方法來存取 父類別中的建構子以及設定為終止繼承的成員, 也是子類別無法繼承的父類別 子類別各有各的建構元, 當用子類別來產生物件時, 會先執行父類別的建構元, 然後才執行子類別的建構元當父類別裡沒有建構元時, 表示將採用預設建構元 ( 即沒有參數的建構元 ) 125

126 10.10 後記 當父類別裡有數個建構元時, 若子類別沒有特別指定, 則內定是呼叫父類別的預設建構元 這種情形下, 在父類別裡必須設計一個沒有參數的建構元若父類別裡除了沒有參數的建構元外, 還有其他的建構元, 那麼在子類別中可以用 super() 來指定所要的建構元 且 super() 敘述必須放在建構元程式區塊的第一行 使用上可遵守以下原則 : 父類別要有一個沒有帶參數的建構元子類別可以透過 super() 來呼叫父類別中特定的建構元 super() 必須放在建構元程式區塊裡的第一行敘述 126

127 10.10 後記 子類別可以重新改寫從父類別繼承而來的方法, 並且, 在同一個類別裡的方法也可以多載 抽象類別用來強迫子類別改寫父類別的方法 抽象類別用來定義一個範本 ( 即抽象方法 ), 然後強迫子類別依照這個範本來實作程式碼使用抽象類別時必須留意 : 不能直接用抽象類別來建立物件, 而是要透過抽象類別的子類別來建立物件抽象類別裡的抽象方法不可以宣告為 private, 否則子類別便無法繼承該方法了 127

128 10.10 後記 extends 只允許繼承自單一類別, 如果要繼承自多個類別就必須將父類別宣告為 interface( 介面 ), 然後在子類別裡來實作之介面是一種特殊的類別, 類別 介面都是一種抽象的資料型別類別庫 ( 或稱套件 ) 是程式寶庫, 是程式再利用的基礎 善用類別庫可以縮短程式開發時程, 降低程式維護成本 128

Microsoft PowerPoint - 13_ClassAndObj.ppt

Microsoft PowerPoint - 13_ClassAndObj.ppt Visual Basic 2005 (VB.net 2.0) 程式設計 講師 : 戴志華 hana@arbor.ee.ntu.edu.tw 國立台灣大學電機工程研究所 第十三章 物件與類別 物件與類別 物件導向程式設計 物件與類別的建立 物件與類別 物件 (object) Ex. 人 屬性 (property) 身高 體重 血型 方法 (method) 走路 跑步 訊息 (message) 交談 事件

More information

Microsoft PowerPoint - P766Ch06.ppt

Microsoft PowerPoint - P766Ch06.ppt PHP5&MySQL 程式設計 第 6 章物件導向 6-1 認識物件導向 物件 (object) 或 案例 (instance) 屬性 (property) 欄位 (field) 或 成員變數 (member variable) 方法 (method) 或 成員函式 (member function) 事件 (event) 類別 (class) 物件導向程式設計 (OOP) 具有下列特點 : 封裝

More information

Microsoft Word - 投影片ch11

Microsoft Word - 投影片ch11 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第十一章抽象類別與介面 本章學習目標認識抽象類別學習介面的使用認識多重繼承與介面的延伸 抽象類別與介面 11-2 11.1 抽象類別 抽象類別的目的是要依據它的格式來修改並建立新的類別 11.1.1 定義抽象類別 定義抽象類別的語法如下 : abstract class 類別名稱 { 宣告資料成員 ; // 定義抽象類別

More information

第1章

第1章 第 9 章 類別 1 本章提要 9.1 前言 9.2 物件導向程式設計基礎 9.3 類別的基本認識 9.4 公有成員與私有成員 9.5 類別變數與類別方法 9.6 進一步認識方法 9.7 進一步認識建構元 9.8 其它 9.9 綜合練習 9.10 後記 2 9.1 前言 物件導向程式設計的特性主要有 : 分而治之 (Divide and Conquer) 資訊隱藏 (Information Hiding)

More information

運算子多載 Operator Overloading

運算子多載 Operator Overloading 多型 Polymorphism 講師 : 洪安 1 多型 編譯時期多型 ( 靜態多型 ) function overloading 如何正確呼叫同名的函數? 利用參數個數與型態 operator overloading 其實同 function overloading 執行時期多型 ( 或動態多型 ) 如何正確呼叫不同物件的相同名稱的成員函數 利用繼承與多型 2 子類別與父類別物件間的指定 (assignment)

More information

Microsoft Word - JAVA Programming Language Homework I ans

Microsoft Word - JAVA Programming Language Homework I ans JAVA Programming Language Homework I - OO concept Student ID: Name: 1. Which of the following techniques can be used to prevent the instantiation of a class by any code outside of the class? A. Declare

More information

The Embedded computing platform

The Embedded computing platform 嵌入式系統及實驗 Embedded System and Experiment 詹曉龍 長庚大學電機系 Java 的類別與物件 : 宣告類別 建構子 public class Customer { private String name; private String address; // Customer 類別宣告 // 成員資料 public int age; // 建構子 : 使用參數設定成員資料初始值

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

软件工程文档编制

软件工程文档编制 实训抽象类 一 实训目标 掌握抽象类的定义 使用 掌握运行时多态 二 知识点 抽象类的语法格式如下 : public abstract class ClassName abstract void 方法名称 ( 参数 ); // 非抽象方法的实现代码 在使用抽象类时需要注意如下几点 : 1 抽象类不能被实例化, 实例化的工作应该交由它的子类来完成 2 抽象方法必须由子类来进行重写 3 只要包含一个抽象方法的抽象类,

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

第1章

第1章 第 8 章 函式 1 本章提要 8.1 前言 8.2 如何定義函式 8.3 函式的呼叫和返回 8.4 傳遞陣列 8.5 方法多載 8.6 遞迴 8.7 綜合練習 8.8 後記 2 8.1 前言 每一種高階程式語言都有提供函式 (Function)( 或稱函數 ) 的功能, 以便將經常使用到的程式功能包裝成函式的形式, 如此一來便能反覆地呼叫該函式來完成某件特定工作在高階程式語言中, 副程式 (Subroutine)

More information

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

More information

Mac Java import com.apple.mrj.*;... public class MyFirstApp extends JFrame implements ActionListener, MRJAboutHandler, MRJQuitHandler {... public MyFirstApp() {... MRJApplicationUtils.registerAboutHandler(this);

More information

投影片 1

投影片 1 Chap 8 繼承 抽象類別與介面 8-1 類別的繼承 8-2 介面 8-3 介面的繼承 8-4 抽象類別 8-5 抽象類別與介面 8-6 常數類別 8-1 類別的繼承 8-1-1 類別架構 8-1-2 類別的繼承 8-1-3 覆寫和隱藏父類別的方法 8-1-4 隱藏父類別的成員變數 8-1-5 使用父類別的建構子 8-1-1 類別架構 - 繼承關係 類別的繼承關係可以讓我們建立類別架構, 在 UML

More information

投影片 1

投影片 1 Chap 9 巢狀類別 多形與套件 9-1 巢狀類別 9-2 匿名內層類別 9-3 多形的基礎 9-4 多形的實作 9-5 套件 9-1 巢狀類別 9-1-1 巢狀類別 9-1-2 內層類別的使用 9-1-1 巢狀類別 - 說明 巢狀類別是在類別中擁有其他類別的宣告, 在外面的類別稱為 外層類別 (Enclosing Class); 內層的成員類別稱為 內層類別 (Inner Classes) 巢狀類別強調類別之間的關聯性,

More information

第七章 繼承

第七章 繼承 繼承概念的優點 類別再使用 ( 程式碼再使用 ) 抽象化概念再使用 類別關係階層化 1 2-3 簡介繼承 Q: Q: 人 黑猩猩與猴子的有哪些共同屬性? 繼承 靈長類特徵 (( 屬性 )) -- 手 足 脊椎 大拇指型態行為 :: -- 育兒 :: 哺乳 -- 使用工具 人類 黑猩猩 彌猴 人類是靈長類的一種 人類繼承了靈長類應有的特徵及行為 人類繼承了靈長類 2 繼承的概念 員工 (employee)

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-055Big5 Title : Sun Certified Programmer for the Java 2 Platform.SE 5.0 Version : Demo 1 / 22 1. 11. public static void parse(string str)

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Fortran Algol Pascal Modula-2 BCPL C Simula SmallTalk C++ Ada Java C# C Fortran 5.1 message A B 5.2 1 class Vehicle subclass Car object mycar public class Vehicle extends Object{ public int WheelNum

More information

untitled

untitled 1 Outline 料 類 說 Tang, Shih-Hsuan 2006/07/26 ~ 2006/09/02 六 PM 7:00 ~ 9:30 聯 ives.net@gmail.com www.csie.ntu.edu.tw/~r93057/aspnet134 度 C# 力 度 C# Web SQL 料 DataGrid DataList 參 ASP.NET 1.0 C# 例 ASP.NET 立

More information

javaexample-02.pdf

javaexample-02.pdf n e w. s t a t i c s t a t i c 3 1 3 2 p u b l i c p r i v a t e p r o t e c t e d j a v a. l a n g. O b j e c t O b j e c t Rect R e c t x 1 y 1 x 2 y 2 R e c t t o S t r i n g ( ) j a v a. l a n g. O

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class - Table.class

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

Microsoft PowerPoint - 14Threads.ppt

Microsoft PowerPoint - 14Threads.ppt Threads Outline Introduction to Threads How to create Thread extend Thread implement Runnable interface Synchronization What is thread? 定義 : 程式的執行軌跡 Single Thread Multi-Thread 依序執行 int x, y; int z; x =

More information

Microsoft PowerPoint - L17_Inheritance_v4.pptx

Microsoft PowerPoint - L17_Inheritance_v4.pptx C++ Programming Lecture 17 Wei Liu ( 刘 威 ) Dept. of Electronics and Information Eng. Huazhong University of Science and Technology May. 2015 Lecture 17 Chapter 20. Object-Oriented Programming: Inheritance

More information

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 JAVA 程 序 设 计 ( 肆 ) 徐 东 / 数 学 系 使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 使 用 Java class 代 表 保 险 箱 public class SaveBox 类 名 类 类 体 实 现 封 装 性 使 用 class SaveBox 代 表 保

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 语 言 程 序 设 计 郑 莉 胡 家 威 编 著 清 华 大 学 逸 夫 图 书 馆 北 京 内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 握 语

More information

JavaIO.PDF

JavaIO.PDF O u t p u t S t ream j a v a. i o. O u t p u t S t r e a m w r i t e () f l u s h () c l o s e () public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException

More information

Strings

Strings Inheritance Cheng-Chin Chiang Relationships among Classes A 類 別 使 用 B 類 別 學 生 使 用 手 機 傳 遞 訊 息 公 司 使 用 金 庫 儲 存 重 要 文 件 人 類 使 用 交 通 工 具 旅 行 A 類 別 中 有 B 類 別 汽 車 有 輪 子 三 角 形 有 三 個 頂 點 電 腦 內 有 中 央 處 理 單 元 A

More information

Microsoft PowerPoint - 11_Templates.ppt

Microsoft PowerPoint - 11_Templates.ppt 1 1. 上機考 20% 期末考 6/23( 四 ) 晚 6:30~8:30 範圍 : 第 7, 8, 9, 10 章實習內容 按座位坐, 隨機抽兩題 2. 紙上測驗 20% 6/21( 二 ) :9:30~11:00 課本 7-11, 13 章內容 2 第 11 章樣版 (Templates) 11.1 簡介 11.2 函式樣版 11.3 多載函式樣版 11.4 類別樣版 11.5 類別樣版與無型

More information

Strings

Strings Polymorphism and Virtual Functions Cheng-Chin Chiang Virtual Function Basics 多 型 (Polymorphism) 賦 予 一 個 函 數 多 種 意 涵, 存 在 於 同 一 類 別 之 內 祖 先 類 別 與 後 代 類 別 間 物 件 導 向 程 式 設 計 基 本 原 理 虛 擬 函 數 (Virtual Function)

More information

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

More information

Microsoft Word - ch04三校.doc

Microsoft Word - ch04三校.doc 4-1 4-1-1 (Object) (State) (Behavior) ( ) ( ) ( method) ( properties) ( functions) 4-2 4-1-2 (Message) ( ) ( ) ( ) A B A ( ) ( ) ( YourCar) ( changegear) ( lowergear) 4-1-3 (Class) (Blueprint) 4-3 changegear

More information

第1章

第1章 第 15 章 標準類別 1 本章提要 15.1 前言 15.2 基本資料類別介紹 15.3 Integer 類別 15.4 Double 類別 15.5 Float 類別 Long 類別 Short 類別 15.6 數學相關類別 Math 15.7 後記 2 15.1 前言 不同基本資料型別可以互相轉換, 但也只予許由小轉大的情況, 例如 1. byte 轉為 short int long float

More information

Microsoft PowerPoint - chap08.ppt

Microsoft PowerPoint - chap08.ppt 第八章繼承 資訊科技系 林偉川 類別繼承使用 extends 關鍵字 修飾字 class 子類別 extends 父類別 1 { // 區塊內的程式敘述 類別以 final 宣告時, 不能做為父類別 extends 關鍵字之後只能接一個父類別 2 1 例子 : class A{ class B extends A { class C extends A { class D extends B { final

More information

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题 2009 年 3 月 全 国 计 算 机 等 级 考 试 笔 试 试 卷 二 级 Java 语 言 程 序 设 计 ( 考 试 时 间 90 分 钟, 满 分 100 分 ) 一 选 择 题 ( 每 题 2 分, 共 70 分 ) 下 列 各 题 A) B) C) D) 四 个 选 项 中, 只 有 一 个 选 项 是 正 确 的 请 将 正 确 选 项 填 涂 在 答 题 卡 相 应 位 置 上,

More information

第十章 虛擬函數 (Virtual Functions)

第十章 虛擬函數   (Virtual Functions) 繼承的優點 程式碼再使用 (code reuse) 抽象概念再使用 類別階層化 澄清物件間的關係 繼承與 Code Reuse( 被動 ) 主計劃 子計劃 1 子計劃 2 子計劃 3 ( 你所在的組 ) 類別庫函式庫 (.lib.dll) 繼承與 Code Reuse class List { void insert() { void delete() { 重新改寫??? (1) 原始碼在哪? (2)

More information

Microsoft Word - 04_object_Boxing_property_indexer.doc

Microsoft Word - 04_object_Boxing_property_indexer.doc C# 程式設計人員參考 object 型別是.NET Framework 中,System.Object 的別名 您可以將 任何型別的值指派給 object 型別的變數 所有的資料型別, 包括預先定義的和使用者定義的, 都繼承自 System.Object 類別 object 資料型別是物件 Box 目標或來源的型 別 範例下列範例顯示 object 型別的變數如何接受任何資料型別的值, 以及 object

More information

Microsoft Word - chap12.doc

Microsoft Word - chap12.doc 94 12. Inheritance in Java Java 的類別同樣有繼承的功能, 衍生類別同樣會繼承基本類別所有的資料成員與函式成員, 當繼承而來的函式成員不適於衍生類別時, 同樣可以在衍生類別之定義內將其重新定義 (override), 並可進一步加入新的成員 ( 資料或函式 ), 以符合衍生類別應有的屬性與行為 一基本類別 ( 父類別 ) 可以有需多繼承它的衍生類別 ( 子類別 ), 與

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

untitled

untitled 4.1AOP AOP Aspect-oriented programming AOP 來說 AOP 令 理 Cross-cutting concerns Aspect Weave 理 Spring AOP 來 AOP 念 4.1.1 理 AOP AOP 見 例 來 例 錄 Logging 錄 便 來 例 行 留 錄 import java.util.logging.*; public class HelloSpeaker

More information

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new ListView 自訂排版 主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new int[]{r.drawable.dog1, R.drawable.dog2,

More information

Microsoft Word - chap10.doc

Microsoft Word - chap10.doc 78 10. Inheritance in C++ 我 們 已 介 紹 了 物 件 導 向 程 式 的 第 一 個 主 要 特 性, 即 程 式 可 模 組 化 成 為 類 別 ( 物 件 ), 類 別 具 有 資 料 封 裝 的 特 性 接 下 來 我 們 要 介 紹 物 件 導 向 程 式 的 另 一 個 主 要 特 性, 那 就 是 類 別 具 有 繼 承 的 功 能 繼 承 就 是 重 複

More information

第1章

第1章 第 7 章 字串 1 本章提要 7.1 前言 7.2 類別與物件 7.3 String 類別 7.4 StringBuffer 類別 7.5 綜合練習 7.6 後記 2 7.1 前言 Java 用 String 類別 (Class) 來處理字串, String 類別是 Java 類別庫內建的類別, 它是一堆已經寫好的程式, 我們可以直接拿來使用字串很像字元型別的一維陣列, 字串裡能存放的資料都屬於字元性質,

More information

<4D F736F F D20B1D0A87CB3A1A7EFB5BDAE76B8EAB867B64FB8C9A7555FABCAADB1>

<4D F736F F D20B1D0A87CB3A1A7EFB5BDAE76B8EAB867B64FB8C9A7555FABCAADB1> 教育部改善師資經費補助 正修科技大學 102 年度教師成果報告 ****************************** 跨平台 APP 開發從零開始 ****************************** 團體 個人 單 位 : 電子工程系 單位主管 : 陳振聲 ( 簽章 ) 職 姓 稱 : 副教授 名 : 林宜賢 執行期間 :102 年 8 月 26 日至 8 月 28 日 教評會審查期間

More information

untitled

untitled 1 Outline ArrayList 類 列類 串類 類 類 例 理 MSDN Library MSDN Library 量 例 參 列 [ 說 ] [] [ 索 ] [] 來 MSDN Library 了 類 類 利 F1 http://msdn.microsoft.com/library/ http://msdn.microsoft.com/library/cht/ Object object

More information

投影片 1

投影片 1 資料庫管理程式 ( 補充教材 -Part2) 使用 ADO.NET 連結資料庫 ( 自行撰寫程式碼 以實現新增 刪除 修改等功能 ) Private Sub InsertButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InsertButton.Click ' 宣告相關的 Connection

More information

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

More information

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6: Chapter 15. Suppressed Exception CH14 Finally Block Java SE 7 try-with-resources JVM cleanup try-with-resources JVM cleanup cleanup Java SE 7 Throwable getsuppressed Throwable[] getsuppressed() Suppressed

More information

全国计算机技术与软件专业技术资格(水平)考试

全国计算机技术与软件专业技术资格(水平)考试 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 2008 年 上 半 年 程 序 员 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 ) 试 题 一 ( 共 15 分 ) 阅 读 以 下 说 明 和 流 程 图, 填 补 流 程 图 中 的 空 缺 (1)~(9), 将 解 答 填 入 答 题 纸 的 对 应 栏 内 [ 说 明

More information

untitled

untitled 1 MSDN Library MSDN Library 量 例 參 列 [ 說 ] [] [ 索 ] [] 來 MSDN Library 了 類 類 利 F1 http://msdn.microsoft.com/library/ http://msdn.microsoft.com/library/cht/ Object object 參 類 都 object 參 object Boxing 參 boxing

More information

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO CHAPTER 使用 Hadoop 打造自己的雲 8 8.3 測試 Hadoop 雲端系統 4 Nodes Hadoop Map Reduce Hadoop WordCount 4 Nodes Hadoop Map/Reduce $HADOOP_HOME /home/ hadoop/hadoop-0.20.2 wordcount echo $ mkdir wordcount $ cd wordcount

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public char

More information

Microsoft Word - 物件導向編程精要.doc

Microsoft Word - 物件導向編程精要.doc Essential Object-Oriented Programming Josh Ko 2007.03.11 object-oriented programming C++ Java OO class object OOP Ruby duck typing complexity abstraction paradigm objects objects model object-oriented

More information

《大话设计模式》第一章

《大话设计模式》第一章 第 1 章 代 码 无 错 就 是 优? 简 单 工 厂 模 式 1.1 面 试 受 挫 小 菜 今 年 计 算 机 专 业 大 四 了, 学 了 不 少 软 件 开 发 方 面 的 东 西, 也 学 着 编 了 些 小 程 序, 踌 躇 满 志, 一 心 要 找 一 个 好 单 位 当 投 递 了 无 数 份 简 历 后, 终 于 收 到 了 一 个 单 位 的 面 试 通 知, 小 菜 欣 喜

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, http://debut.cis.nctu.edu.tw/~chi Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, : POSITIVE_INFINITY NEGATIVE_INFINITY

More information

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class 踩地雷遊戲 高慧君南港高中 開啟專案 MineSweep 任務一 : 產生 30X20 個磚塊編輯 Table 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.util.arraylist; Write a description of class MyWorld

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

一、

一、 考試時間 : 1 小時 30 分座號 : 全五頁第一頁 注意 : 禁止使用電子計算器 不必抄題, 作答時請將試題題號及答案依照順序寫在試卷上, 於本試題上作答者, 不予計分 一 就下列 Java 程式片斷中加入一個 for 迴圈, 使其印出右側結果 (15 分 ) public class AllNumbers number square cube 0 0 0 public static void

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public char

More information

4. 如下的程式碼中, 宣告了類別 A3 和 B3 由於在兩個類別中都定義了 print() 的方法, 所以依據定義, 總共有兩次的 overloading 以及一次的 overriding public class A3 { public class B3 extends A3 { protect

4. 如下的程式碼中, 宣告了類別 A3 和 B3 由於在兩個類別中都定義了 print() 的方法, 所以依據定義, 總共有兩次的 overloading 以及一次的 overriding public class A3 { public class B3 extends A3 { protect 姓名 : 物件導向程式設計 (II) Spring 2010, 期中考 學號 : 是非題 : ( 每題 5 分 ) 注意 : 若答案為 非, 你必須提供正確的解釋才有分數 ; 否則, 以零分計 若有程式錯誤, 請回答 非 並指出錯誤 1. 如下的程式碼中, 宣告了類別 A1 和 B1 若在其他類別( 如控制類別 ) 執行 B1 b1 = new B1(5);, 則 a1 的值會改成 5 public

More information

Microsoft PowerPoint - EmbSys101_Java Basics.ppt [相容模式]

Microsoft PowerPoint - EmbSys101_Java Basics.ppt [相容模式] Java Basics Hi Hsiao-Lung Chan, Ph.D. Dept Electrical Engineering Chang Gung University, Taiwan chanhl@maili.cgu.edu.twcgu 執行環境 - eclipse 點選 eclipse 軟體執行檔 設定工作路徑 eclipse 開啟 2 建置 Java 專案 File New project

More information

(6) 要 求 付 款 管 理 员 从 预 订 表 中 查 询 距 预 订 的 会 议 时 间 两 周 内 的 预 定, 根 据 客 户 记 录 给 满 足 条 件 的 客 户 发 送 支 付 余 款 要 求 (7) 支 付 余 款 管 理 员 收 到 客 户 余 款 支 付 的 通 知 后, 检

(6) 要 求 付 款 管 理 员 从 预 订 表 中 查 询 距 预 订 的 会 议 时 间 两 周 内 的 预 定, 根 据 客 户 记 录 给 满 足 条 件 的 客 户 发 送 支 付 余 款 要 求 (7) 支 付 余 款 管 理 员 收 到 客 户 余 款 支 付 的 通 知 后, 检 2016 年 上 半 年 软 件 设 计 师 考 试 真 题 ( 下 午 题 ) 下 午 试 题 试 题 一 ( 共 15 分 ) 阅 读 下 列 说 明 和 图, 回 答 问 题 1 至 问 题 4, 将 解 答 填 入 答 题 纸 的 对 应 栏 内 说 明 某 会 议 中 心 提 供 举 办 会 议 的 场 地 设 施 和 各 种 设 备, 供 公 司 与 各 类 组 织 机 构 租 用 场

More information

chp6.ppt

chp6.ppt Java 软 件 设 计 基 础 6. 异 常 处 理 编 程 时 会 遇 到 如 下 三 种 错 误 : 语 法 错 误 (syntax error) 没 有 遵 循 语 言 的 规 则, 出 现 语 法 格 式 上 的 错 误, 可 被 编 译 器 发 现 并 易 于 纠 正 ; 逻 辑 错 误 (logic error) 即 我 们 常 说 的 bug, 意 指 编 写 的 代 码 在 执 行

More information

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj Message Transition 5-1 5-2 DataInputStream Class 5-3 DataOutputStream Class 5-4 PrintStream Class 5-5 (Message Transition) (Exercises) Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream

More information

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074> 程 序 设 计 实 习 INFO130048 3-2.C++ 面 向 对 象 程 序 设 计 重 载 继 承 多 态 和 聚 合 复 旦 大 学 计 算 机 科 学 与 工 程 系 彭 鑫 pengxin@fudan.edu.cn 内 容 摘 要 方 法 重 载 类 的 继 承 对 象 引 用 和 拷 贝 构 造 函 数 虚 函 数 和 多 态 性 类 的 聚 集 复 旦 大 学 计 算 机 科 学

More information

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e Android Studio Debugging 本篇教學除了最基本的中斷點教學之外, 還有條件式中斷的教學 條件式中斷是進階的除錯技巧, 在某些特定情況中, 我們有一個函數可能會被呼叫數次, 但是我們只希望在某種條件成立時才進行中斷, 進而觀察變數的狀態 而條件式中斷這項技巧正是符合這項需求 本教學分兩部分 單步除錯 (Page2~11, 共 10) 條件式中斷點 (Page12~17, 共 6)

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 1Z0-854 Title : Java Standard Edition 5 Programmer Certified Professional Upgrade Exam Version : Demo 1 / 12 1.Given: 20. public class CreditCard

More information

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 專題進度 老師 : 趙啟時老師 學生 : 陳建廷 2013/10/13 用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 程式碼 : package com.example.phone; import java.util.arraylist;

More information

The golden pins of the PCI card can be oxidized after months or years

The golden pins of the PCI card can be oxidized after months or years Q. 如何在 LabWindows/CVI 編譯 DAQ Card 程式? A: 請參考至下列步驟 : 步驟 1: 安裝驅動程式 1. 安裝 UniDAQ 驅動程式 UniDAQ 驅動程式下載位置 : CD:\NAPDOS\PCI\UniDAQ\DLL\Driver\ ftp://ftp.icpdas.com/pub/cd/iocard/pci/napdos/pci/unidaq/dll/driver/

More information

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public

More information

untitled

untitled 1 行 行 行 行.NET 行 行 類 來 行 行 Thread 類 行 System.Threading 來 類 Thread 類 (1) public Thread(ThreadStart start ); Name 行 IsAlive 行 行狀 Start 行 行 Suspend 行 Resume 行 行 Thread 類 (2) Sleep 行 CurrentThread 行 ThreadStart

More information

96年特種考試第一次司法人員考試試題解答

96年特種考試第一次司法人員考試試題解答 106 年公務人員特種考試警察人員 一般警察人員考試及 106 年特種考試交通事業鐵路人員考試試題 考試別 : 鐵路人員考試 等別 : 員級考試 類科 ( 別 ): 資訊處理 科目 : 程式設計概要 考試時間 :1.5 小時 一 就下列 Java 程式片斷中加入一個 for 迴圈, 使其印出右側結果 (15 分 ) public class AllNumbers number square cube

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

EJB-Programming-3.PDF

EJB-Programming-3.PDF :, JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Value Object Design Pattern J2EE Design Patterns Value Object Value Object Factory J2EE EJB Test Client

More information

Microsoft Word - 投影片ch15

Microsoft Word - 投影片ch15 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第十五章多執行緒 本章學習目標認識執行緒學習如何建立執行緒學習如何管理執行緒認識執行緒的同步處理 多執行緒 15-2 15.1 認識執行緒 多執行緒 的機制可以同時執行多個程式區塊 app15_1 是單一執行緒的範例 : 01 // app15_1, 單一執行緒的範例 02 class CTest 03 { 04 private

More information

相 应 功 能 (5) 再 将 Boy 类 作 为 Girl 类 的 友 元 类, 在 Boy 类 的 某 成 员 函 数 VisitGirl(Girl & ) 中 访 问 Girl 类 的 私 有 成 员, 观 察 编 译 器 给 出 的 信 息 ( 6 ) 删 除 两 个 类 中 的 函 数 V

相 应 功 能 (5) 再 将 Boy 类 作 为 Girl 类 的 友 元 类, 在 Boy 类 的 某 成 员 函 数 VisitGirl(Girl & ) 中 访 问 Girl 类 的 私 有 成 员, 观 察 编 译 器 给 出 的 信 息 ( 6 ) 删 除 两 个 类 中 的 函 数 V 面 向 对 象 程 序 设 计 及 C++ 课 程 实 验 教 学 大 纲 课 程 编 号 : B030001S 课 程 名 称 : 面 向 对 象 程 序 设 计 及 C++ 课 内 总 学 时 : 3 上 机 实 验 学 时 : 8 一 实 验 课 程 的 性 质 目 的 和 任 务 性 质 : 本 实 验 课 程 是 本 科 理 工 科 各 专 业 学 生 的 通 识 基 础 课, 该 实 验

More information

OOP with Java 通知 Project 3: 4 月 19 日晚 9 点

OOP with Java 通知 Project 3: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 4 月 19 日晚 9 点 复习 Upcasting 同一基类的不同子类可以被视为同一类型 ( 基类 ) 放宽类型一致性 简化接口 class A{ class B{ A a = new A(); B b = new B(); // A a = new B(); compile

More information

Microsoft PowerPoint - Chap03.ppt [相容模式]

Microsoft PowerPoint - Chap03.ppt [相容模式] 本章目的 2D / 3D 遊戲程式設計入門使用 XNA 3.0 與 C# 探討 XNA 遊戲程式內部的基本架構與遊戲開發流程 示範如何完成一個簡單的 XNA 遊戲方案 第三章 XNA 遊戲程式基本架構 1 2 新增 XNA 專案 新增 XNA 專案 3 4 XNA 相關的命名空間 Game1.cs 程式中的六個函數 using Microsoft.Xna.Framework; // 和 XNA 架構相關的型別

More information

Microsoft PowerPoint - 09_Inheritance.ppt

Microsoft PowerPoint - 09_Inheritance.ppt 1 第九章 - 繼承 (Inheritance) 9.1 簡介 9.2 基本類別與衍生類別 9.3 受保護的成員 9.4 基本類別與衍生類別的關係 9.5 案例研究 : 三層繼承架構 9.6 衍生類別的建構子與解構子 9.8 public, protected, 與 private 繼承關係 9.9 繼承的優點 2 9.1 簡介 不同類別之間的關係 合成關係與繼承關係 合成關係 ( has-a )

More information

<4D6963726F736F667420576F7264202D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

<4D6963726F736F667420576F7264202D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF> 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 考 试 2009 年 上 半 年 软 件 设 计 师 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 请 按 下 述 要 求 正 确 填 写 答 题 纸 1. 在 答 题 纸 的 指 定 位 置 填 写 你 所 在 的 省 自 治 区 直 辖 市 计 划 单 列 市 的 名 称 2. 在 答

More information

第七讲 继承与多态

第七讲  继承与多态 第 七 章 继 承 与 派 生 1 本 章 主 要 内 容 的 继 承 成 员 的 访 问 控 制 单 继 承 与 多 继 承 派 生 的 构 造 析 构 函 数 成 员 的 标 识 与 访 问 深 度 探 索 2 的 继 承 与 派 生 的 继 承 与 派 生 保 持 已 有 的 特 性 而 构 造 新 的 过 程 称 为 继 承 在 已 有 的 基 础 上 新 增 自 己 的 特 性 而 产 生

More information

(procedure-oriented)?? 2

(procedure-oriented)?? 2 1 (procedure-oriented)?? 2 (Objected-Oriented) (class)? (method)? 3 : ( 4 ???? 5 OO 1966 Kisten Nygaard Ole-Johan Dahl Simula Simula 爲 6 Smalltalk Alan Kay 1972 PARC Smalltalk Smalltalk 爲 Smalltalk 爲 Smalltalk

More information

Microsoft Word - Learn Objective-C.doc

Microsoft Word - Learn Objective-C.doc Learn Objective C http://cocoadevcentral.com/d/learn_objectivec/ Objective C Objective C Mac C Objective CC C Scott Stevenson [object method]; [object methodwithinput:input]; output = [object methodwithoutput];

More information

PowerPoint 簡報

PowerPoint 簡報 Paint 繪圖板 JAVA 程式設計 指導老師 : 鄞宗賢 組員 : 4A3G0901 劉彥佐 4A3G0907 韓偉志 畫面預覽 匯入參數 package paint; import java.awt.*; import java.awt.event.*; import javax.swing.*; 主程式 public class paint{ public static void main(string[]

More information

untitled

untitled 1 7 7.1 7.2 7.3 7.4 7.5 2 7.1 VFT virtual 7.1 3 1 1. 2. public protected public 3. VFT 4. this const volatile 4 2 5. ( ) ( ) 7.1 6. no-static virtual 7.2 7. inline 7.3 5 3 8. this this 9. ( ) ( ) delete

More information

<4D6963726F736F667420506F776572506F696E74202D20B5DA3035D5C220C3E6CFF2B6D4CFF3B8DFBCB6B3CCD0F2C9E8BCC6>

<4D6963726F736F667420506F776572506F696E74202D20B5DA3035D5C220C3E6CFF2B6D4CFF3B8DFBCB6B3CCD0F2C9E8BCC6> Java 程 序 设 计 教 学 课 件 河 南 农 业 大 学 信 管 学 院 计 算 机 系 河 南 农 业 大 学 信 管 学 院 计 算 机 系 高 级 语 言 程 序 设 计 课 程 组 第 5 章 面 向 对 象 高 级 程 序 设 计 主 要 内 容 5.1 继 承 5.2 多 态 性 5.3 抽 象 类 和 抽 象 方 法 5.4 接 口 5.5 内 部 类 和 匿 名 类 5.1

More information

ebook55-13

ebook55-13 1 3 C + + C C + + 13.1 X 256 C + + p r i v a t e p u b l i c p e r m u t e () X X Y 13.2 Y Y X 13 257 Y X Y X X m a i n () s i z e o f ( Y s i z e o f ( X ) p u b l i c p r i v a t e p u b l i c p r i

More information

Microsoft Word - CPFinal2010Spring

Microsoft Word - CPFinal2010Spring 通識計算機程式設計期末考試題, 6/25/2010 共 12 頁, 滿分 100 分外加最多 4 分 1. 撰寫 C# 敘述達成下列要求 : ( 假設 using System; 敘述已經包含於程式中 ) (a) 撰寫類別程式 Rhombus 代表菱形, 其中宣告私有 double 變數 d1 d2, 分別代表兩互相垂直的對角線長, 另有建構式設定 d1 d2 之值, 屬性 D1 D2 分別傳回與設定

More information

Microsoft PowerPoint - chap07.ppt

Microsoft PowerPoint - chap07.ppt 第七章類別類別與物件 資訊科技系 林偉川 類別的定義語法 修飾字 class 類別名稱 { // 類別的標頭 // 屬性宣告 // 建構子定義 // 方法定義 2 1 類別的修飾字 public- 公開類別, 宣告成此種類別可以被任何類別所使用 無修飾字 (default) 類別, 此種類別僅能被同一套件 (package) 內的類別使用 final- 此種類別不可被繼承 abstract- 此為抽象類別的修飾字

More information

java2d-4.PDF

java2d-4.PDF 75 7 6 G r a d i e n t P a i n t B a s i c S t r o k e s e t P a i n t ( ) s e t S t o r k e ( ) import java.awt.*; import java.awt.geom.*; public class PaintingAndStroking extends ApplicationFrame { public

More information

Microsoft Word - 新1-12.doc

Microsoft Word - 新1-12.doc 实训 5 面向对象编程练习 实训 5 面向对象编程练习 5.1 实训目的 通过编程和上机实验理解 Java 语言是如何体现面向对象编程基本思想 以及如何创建类 和对象 了解成员变量和成员方法的特性 5.2 实训要求 编写一个体现面向对象思想的程序 编写一个创建对象和使用对象的方法的程序 5.3 实训内容 5.3.1 创建对象并使用对象 1 定义一个 Person 类 可以在应用程序中使用该类 成员属性

More information

Microsoft Word - JAVA3.rtf

Microsoft Word - JAVA3.rtf Java2 lesson The aim of this lesson is concept and method. ( 赵 卓 宁 ) 教 学 计 划 学 习 进 度 Java 3 6.1~6.34 内 容 介 绍 教 材 内 容 : 第 六 课 描 绘 的 层 次 和 关 系 主 要 议 程 1. 的 复 用 2. 的 继 承 3. 关 于 多 态 4. 应 用 约 束 ( 封 装 ) 5. 接

More information

Adobe® Flash® 的 Adobe® ActionScript® 3.0 程式設計

Adobe® Flash® 的 Adobe® ActionScript® 3.0 程式設計 337 18 Adobe Flash CS4 Professional MovieClip ActionScript Flash ActionScript Flash Flash Flash MovieClip MovieClip ActionScript ( ) MovieClip Flash Sprite ActionScript MovieClip ActionScript 3.0 Shape

More information

建模与图形思考

建模与图形思考 C03_c 基 於 軟 硬 整 合 觀 點 JNI: 从 C 调 用 Java 函 数 ( c) By 高 煥 堂 3 How-to: 基 於 軟 硬 整 合 觀 點 从 C 调 用 Java 函 数 如 果 控 制 点 摆 在 本 地 C 层, 就 会 常 常 1. 从 本 地 C 函 数 去 调 用 Java 函 数 ; 2. 从 本 地 C 函 数 去 存 取 Java 层 对 象 的 属 性

More information

運算子多載 Operator Overloading

運算子多載 Operator Overloading 函數樣板 (Function Template) 與 類別樣板 (Class Template) 講師 : 洪安 1 資料結構與 C++ 程式設計進階班 為何需要通用函數? (1/2) int abs(int x) { return (x>0)?x:-x; 取名困難不好記 float fabs(float x) { return (x>0)?x:-x; complex cabs(complex x)

More information