Ch03 類別與物件 物件導向系統分析與設計.

Slides:



Advertisements
Similar presentations
第3-2章 类与 对象 Java类的特性 教学内容: 类的私有成员与公共成员 方法的重载 构造方法 实例成员与静态成员 重点: 重载 难点:
Advertisements

单元二:面向对象程序设计 任务二:借书卡程序设计.
第四章 类、对象和接口.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第一單元 建立java 程式.
第6章 類別與物件 – 封裝 6-1 物件導向的基礎 6-2 Java的類別與物件 – 封裝 6-3 類別的建構子
项目6 通用堆栈.
四資二甲 第三週作業 物件導向程式設計.
Ch03 物件導向程式設計_物件與類別 JAVA 程式設計入門(II).
第二章 JAVA语言基础.
Ch07 介面與多重繼承 物件導向程式設計(II).
JAVA程序设计 (03) JAVA Programming
1 Department of Computing.
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
Ch08 巢狀類別 物件導向程式設計(II).
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
簡易C++除錯技巧 長庚大學機械系
内容提要 对象的生命周期 构造函数 析构函数 拷贝构造函数. 常宝宝 北京大学计算机科学与技术系
JAVA 程式設計與資料結構 第七章 繼承與Interface.
Classes Lecturer: 曾學文.
Ch02 類別、物件及屬性 物件導向程式設計(II).
Ch03 方法 物件導向程式設計(II).
Ch10 類別與物件-方法 Java程式設計(2).
程式設計實作.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
Java程序设计 第9章 继承和多态.
程式設計(二) 進階類別 郭文真 Sabrina Kuo.
類別的繼承 Vehicle Car.
第七章 檔案處理.
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第一單元 建立java 程式.
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第 19 章 XML記憶體執行模式.
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
第三课 标识符、关键字、数据类型.
CH05. 選擇敘述.
C++复习2----类与对象.
Ch09 物件導向技術導論(二) Java程式設計(2).
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
LINQ資料查詢技術.
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
樣版.
第三章 数据抽象.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
OOP9 類別Class.
函數應用(二)與自定函數.
陣列與結構.
第二章 Java基本语法 讲师:复凡.
簡單Java介紹.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
JAVA 程式設計與資料結構 第三章 物件的設計.
作業系統實習課(二) -Scheduler-Related System Calls-
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
開發Java程式語言的工具 JDK.
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
Summary
方法(Method) 函數.
InputStreamReader Console Scanner
Presentation transcript:

Ch03 類別與物件 物件導向系統分析與設計

類別的定義-類別的定義語法 修飾字 class 類別名稱 //類別的標頭 { // 屬性宣告 // 建構子定義 // 方法定義 }

類別的定義-類別的修飾字 public-公開類別,宣告成此種類別可以被任何類 別所使用。 無修飾字(default)類別,此種類別僅能被同一套 件(package)內的類別使用。 final-此種類別不可被繼承。 abstract-此為抽象類別的修飾字。此種類別至少 擁有一個抽象方法,不可用於直接建立物件

類別的定義-類別的命名規則 類別名稱的第一個字母應該大寫,如:Car、Person。 若是由兩個字以上組成時,每個單字的第一個字母 為大寫,如:CarClass。 名稱中包括縮寫時,所有縮寫字母為大寫,如: URL。 class EmptyClass { }

建立物件 宣告物件 建立物件實體 宣告並建立物件實體 類別名稱 物件名稱; 物件名稱 = new 類別名稱(); 類別名稱() 為建構子呼叫 類別名稱 物件名稱; 建立物件實體 物件名稱 = new 類別名稱(); 類別名稱() 為建構子呼叫 宣告並建立物件實體 類別名稱 物件名稱 = new 類別名稱();

物件名稱 物件名稱必須是合法的識別字。 其命名規則為第一個字的字母皆為小寫。 若為複合字時,其餘字的第一個字母為大寫 若為縮寫字母時,皆為小寫。

範例1: 宣告及初始化物件 class Ch02_01 { public static void main(String [] args) EmptyClass emptyClass = new EmptyClass(); Ch02_01 ch02_01 = new Ch02_01(); System.out.println(emptyClass); System.out.println(ch02_01); } class EmptyClass 輸出結果 有幾個class在你的目錄下? 在一個程式檔中有兩個class?? Ch02/Ch02_01.java

屬性(1) 屬性的宣告語法 存取權限相關的修飾字 public-公用級,所有類別皆可使用此級屬性。 修飾字 資料型態 屬性名稱; 存取權限相關的修飾字 public-公用級,所有類別皆可使用此級屬性。 protected-保護級,同一套件內及其子類別可 以直接使用。 無修飾字-預設級(default)或稱套件級,同一 套件內的類別可以直接使用。 private-私有級,屬性所在的類別才能使用。

屬性(2) 使用final修飾字自訂常數 static修飾者為類別屬性 使用點(dot)運算子指出取用的屬性 public final int wheels = 4; static修飾者為類別屬性 類別屬性是同一類別中所有物件所共有,不屬某個物 件 使用點(dot)運算子指出取用的屬性 屬性只要宣告就會自動初始化,設上預設值

範例2-系統需求 建立一個日期系統,每一個日期的值包含有年、月、 日。顯示昨天、今天、明天的資料

範例2-系統分析 Date Day:int Month:int Year: int today:Date yesterday:Date tomorrow:Date

範例2-程式設計 為什麼明天的日期是0-0-0 class Ch02_02 { public static void main(String [] args) Date today = new Date(); Date yesterday = new Date(); Date tomorrow = new Date(); today.day=14; today.month=3; today.year=2007; yesterday.day=13; yesterday.month=3; yesterday.year=2007; System.out.println("今天的日期是: " + today.year + "-" + today.month + "-" + today.day); System.out.println("昨天的日期是: " + yesterday.year + "-" + yesterday.month + "-" + yesterday.day); System.out.println("明天的日期是: " + tomorrow.year + "-" + tomorrow.month + "-" + tomorrow.day); } class Date int day; int month; int year; 為什麼明天的日期是0-0-0

活化腦、手運動(1) 修正範例2的程式Ch02_02.java,使得 “明天”的日 期是正確的

活化腦、手運動(2) 考慮一下,下列情況: 在範例2的程式碼中,有兩個class ,是不是要在同一 個檔案中??? 測試: 建立一個新的資料夾Ch02_02(為了避免與範例2中, 已經建立的類別相干擾) 將class Ch02_02程式碼存到Ch02_02資料夾下,此程式 檔案的名稱是Ch02_02.java 將class Date程式碼存到Ch02_02資料夾下,程式檔案的 名稱是Ch02_02_01.java 先編譯Ch02_02_01.java (javac Ch02_02_01.java) 再編譯Ch02_02.java (javac Ch02_02.java) 再執行Ch02_02.java (java Ch02_02) 為什麼456的順序不可以改變??? Ch02_02/Ch02_02_01.java ; Ch02_02/Ch02_02.java

範例3: 什麼是private class Ch02_03 { public static void main(String [] args) Date3 today = new Date3(); Date3 yesterday = new Date3(); Date3 tomorrow = new Date3(); today.day=14; today.month=3; today.year=2007; yesterday.day=13; yesterday.month=3; yesterday.year=2007; System.out.println("今天的日期是: " + today.year + "-" + today.month + "-" + today.day); System.out.println("昨天的日期是: " + yesterday.year + "-" + yesterday.month + "-" + yesterday.day); System.out.println("明天的日期是: " + tomorrow.year + "-" + tomorrow.month + "-" + tomorrow.day); } class Date3 private int day; private int month; private int year; Ch02/Ch02_03.java

範例4:什麼是static Ch02/Ch02_04.java class Ch02_04 { public static void main(String [] args) Date4 today = new Date4(); Date4 yesterday = new Date4(); Date4 tomorrow = new Date4(); today.day=14; today.month=3; today.year=2007; yesterday.day=13; yesterday.month=3; yesterday.year=2007; System.out.println("今天的日期是: " + today.year + "-" + today.month + "-" + today.day); System.out.println("昨天的日期是: " + yesterday.year + "-" + yesterday.month + "-" + yesterday.day); System.out.println("明天的日期是: " + tomorrow.year + "-" + tomorrow.month + "-" + tomorrow.day); } class Date4 static int day; static int month; static int year; Ch02/Ch02_04.java

範例5:物件屬性與類別屬性的差別 class Ch02_05 { int i = 0; static int s = 100; public static void main(String [] args) Ch02_05 obj1 = new Ch02_05(); Ch02_05 obj2 = new Ch02_05(); obj1.i++; obj1.s++; obj2.i++; obj2.s++; System.out.println("obj1.i = " + obj1.i); System.out.println("obj1.s = " + obj1.s); System.out.println("obj2.i = " + obj2.i); System.out.println("obj2.s = " + obj2.s); //System.out.println("Ch02_05.i = " + i); System.out.println("Ch02_05.s = " + s); } Ch02/Ch02_05.java

類別成員和物件成員的區別

範例6:指向同類別的參照變數 class Ch02_06 { int i = 0; static int s = 100; public static void main(String [] args) Ch02_06 obj1 = new Ch02_06(); Ch02_06 obj2 = obj1; obj1.i++; obj1.s++; obj2.i++; obj2.s++; System.out.println("obj1.i = " + obj1.i); System.out.println("obj1.s = " + obj1.s); System.out.println("obj2.i = " + obj2.i); System.out.println("obj2.s = " + obj2.s); //System.out.println("Ch02_06.i = " + i); System.out.println("Ch02_06.s = " + s); } Ch02/Ch02_06.java

活化腦、手運動(3) 承手腦運動(1),建立一個新的物件birthday,指向 today

方法(1) 定義 修飾字、形式參數列和return敘述為非必要。 資料型別和方法名稱為必要。 方法的資料型別必須和回傳值相同。   <修飾字> 資料型別 方法名稱(<形式參數列>)   {   // 方法中的敘述   <return 回傳值;>   } 修飾字、形式參數列和return敘述為非必要。 資料型別和方法名稱為必要。 方法的資料型別必須和回傳值相同。

方法(2) 方法的命名規則 一般方法名稱的前面部份會是一個動詞,動詞應全為 小寫。 動詞後的字,第一個字母為大寫 若方法是為了設定或取得private屬性,則分別使用 「set屬性名稱」和「get屬性名稱」。

方法(3) 呼叫方法的語法 物件名稱.方法名稱(<參數列>) 參數列的工作是把參數傳給方法。 參數列為選擇性的功能,視方法定義的形式參數列而 定。

如果,你不想讓一些資料隨便被人更改,或是一些固定值,或是你的生日不變 範例1 class Ch03_01 { public static void main(String [] args) { Date today = new Date(); today.set_day(21); today.set_month(3); today.set_year(2007); System.out.println("今天的日期是: " + today.get_year() + "-" + today.get_month() + "-" + today.get_day()); } class Date { private int day; private int month; private int year; void set_day(int a) { day = a; } void set_month(int a) { month = a; } void set_year(int a) { year = a; } int get_day() { return day; } int get_month() { return month; } int get_year() { return year; } 資訊隱藏 想想,private使用的好時機 如果,你不想讓一些資料隨便被人更改,或是一些固定值,或是你的生日不變 Ch03/Ch03_01.java

方法(4) 形式參數式中,以逗號分隔各個形式參數 static修飾方法時,該方法為類別方法 抽象方法沒有實作,無方法主體 public int getArea(int w, int h) { return w*h; } static修飾方法時,該方法為類別方法 抽象方法沒有實作,無方法主體 abstract <修飾字> 資料型別 方法名稱(<形式參數列>);

方法的呼叫(1) 呼叫方法時的程式走向

方法的呼叫(2) 參數只傳遞數值

方法的呼叫(3) 傳值和傳參照 基本型別(boolean、byte、short、int、long、char、float 及double)是以傳值的方式回傳。 自訂型別(陣列或物件)是以傳參照的方式回傳資料。

方法的型別與回傳值 return; 方法的型別就是回傳值的型別 使用void宣告的方法,返回時不回傳任何值 修飾字 資料型別 方法名稱(形式參數列) { // 方法中的敘述 return 回傳值; } 使用void宣告的方法,返回時不回傳任何值 return;

Today和birthday兩個物件實體是不是同一個? 範例2 class Ch03_02 { public static void main(String [] args) Date2 today = new Date2(); Date2 birthday = new Date2(); birthday = today; today.set_day(21); today.set_month(3); today.set_year(2007); System.out.println("今天的日期是: " + today.get_year() + "-" + today.get_month() + "-" + today.get_day()); System.out.println("today: " + today); System.out.println("birthday: " + birthday); System.out.println("生日是: " + birthday.get_year() + "-" + birthday.get_month() + "-" +birthday.get_day()); } Ch03/ch03_02.java

範例2_1訂做另一個真正的today(法一) class Ch03_02_01 { public static void main(String [] args) Date3 today = new Date3(); Date3 birthday = new Date3(); today.set_day(21); today.set_month(3); today.set_year(2007); birthday.set_day(today.get_day()); birthday.set_month(today.get_month()); birthday.set_year(today.get_year()); System.out.println("今天的日期是: " + today.get_year() + "-" + today.get_month() + "-" + today.get_day()); System.out.println("today: " + today); System.out.println("birthday: " + birthday); System.out.println("生日是: " + birthday.get_year() + "-" + birthday.get_month() + "-" +birthday.get_day()); } Ch03/ch03_02_01.java

範例2_2訂做另一個真正的today(法二)—傳參照 class Ch03_02_02 { public static void main(String [] args) Date4 today = new Date4(); Date4 birthday; today.set_day(21); today.set_month(3); today.set_year(2007); birthday = duplicateObj(today); System.out.println("今天的日期是: " + today.get_year() + "-" + today.get_month() + "-" + today.get_day()); System.out.println("today: " + today); System.out.println("birthday: " + birthday); System.out.println("生日是: " + birthday.get_year() + "-" + birthday.get_month() + "-" +birthday.get_day()); } static Date4 duplicateObj(Date4 ori) Date4 b = new Date4(); b.set_day(ori.get_day()); b.set_month(ori.get_month()); b.set_year(ori.get_year()); System.out.println("ori : " + ori); System.out.println("b : " +b); return b; Ch03/ch03_02_02.java

活化手、腦練習(1) 建立一個類別,類別內有一個sort方法,它可以將 傳入的一個陣列,排序後(由小到大)傳回給另一 個陣列 Ch03/Ex03_01.java

變數領域(1) 大括弧是變數領域的藩籬 若一個變數於某個區塊內宣告,則區塊內從宣告點以 下為變數的領域。 區塊外不為變數的領域。 { int j=1; } j++; //錯誤,無法識別變數j

變數領域(2)

變數領域(3) 屬性也稱為欄位變數。 方法內的變數稱為自動變數或區域變數。 自動變數和欄位變數同名是合法的情況,不過兩者 若同名,則欄位變數會因為被遮蔽而無法在方法內 被「看到」。 欲在方法內看到同名的屬性時,可以使用this 關鍵 字,指出使用的是物件本身的屬性。 this.屬性名稱

變數領域(4)

範例3 class Ch03_03 { int a = 10; public static void main(String [] args) Ch03_03 objA = new Ch03_03(); System.out.println("objA.a = " + objA.a); objA.myMethod(1); } void myMethod( int a) System.out.println("myMethod內的a : " + a); a = this.a; System.out.println("重設a,後myMethod內的a : " + a); System.out.println("myMethod內的this.a : " + this.a); Ch03/Ch_03_03.java

方法多載 同一類別中,若定義數個相同名稱的方法,而各方 法所需的參數不同時,稱為方法多載 (Overloading)。 多載方法是以傳入的參數個數及參數型別做為呼叫 的判斷依據。 多載方法的形式參數的個數及型別相同時,為非法 定義。 多載的目的是因應不同的傳遞資料,讓方法更有彈 性。

範例4 class Ch03_04 { public static void main(String [] args) 圓形 大餅 = new 圓形(); 矩形 阿方 = new 矩形(); System.out.println("圓形的面積是 : " + 求面積(大餅)); System.out.println("矩形的面積是 : " + 求面積(阿方)); } static double 求面積(圓形 圓) return (圓.圓周率 * 圓.半徑 * 圓.半徑); static double 求面積(矩形 矩) return (矩.長度 * 矩.length); class 圓形 final double 圓周率 = 3.14; double 半徑 = 2; class 矩形 double 長度 = 2; double length = 1; 範例4 C03/C03_04.java

活化手腦練習(2) 建立多載方法myAdd,依照傳入的不同資料型別的 資料作加的動作。 資料型別包括:int, float, double, String Ch03/Ex03_02.java

建構子 使用new及建構子建立物件 物件名稱 = new 類別名稱(); 呼叫建構子 2018/11/15

預設的建構子 沒有定義建構子的類別時,編譯器會自動設給一個 沒有形式參數的建構子。 預設的建構子是沒有內容的,不會對物件的屬性有 任何影影響。 定義類別時,若有定義任何建構子,則編譯器不會 設給預設建構子 2018/11/15

定義建構子(1) 建構子的名稱一律同類別名稱,而且不宣告回傳資 料型別。 建構子的修飾字可以為public、protected、private或 無修飾字。 建構子修飾字不使用static和abstract。 修飾字 類別名稱(形式參數列) { //程式敘述 } 2018/11/15

定義建構子(2) 建構子也可以多載 class SomeClass { public SomeClass() //不使用參數建立物件 } public SomeClass(int x, int y) //使用參數建立物件 2018/11/15

建構子的呼叫(1) 建立物件時呼叫建構子 方法可以和建構子同名。有回傳型別者為方法;反 之,無回傳型別者為建構子。 類別名稱 物件名稱 = new 類別名稱(形式參數列); 2018/11/15

建構子程式設計(1/6) 系統需求:建立一個客戶資料, 如範例4 Customer.java class Customer { int id; char rank; String birthday; Customer(int i, int r, String b) { id = I; rank =r; birthday = b; } void showData() { System.out.println(id + “,” + rank + “,” + birthday); } 2018/11/15

建構子程式設計(2/6) Main 主程式:Ch05_01.java class Ch05_01 { public static void main(String [] args) { Customer c1 = new Customer(1, ‘A’, “1950/11/20”); Customer c2 = new Customer(2, ‘B’, “1960/10/20”); } 2018/11/15

建構子程式設計(3/6) 如何將birthday改成一個Date類別的物件??? 2018/11/15

建構子程式設計(4/6) Date.java class Date { int year; int month; int day; Date(int y, int m, int d) { year =y; month = m; day = d; } void showDate() String temp; temp = "" + year + "/" + month + "/" + day; System.out.println("日期:" + temp); 2018/11/15

建構子程式設計(5/6) Customer.java class Customer { int id; char rank; Date birthday; Customer(int i, char r, int y, int m, int d) id = i; rank = r; birthday = new Date(y, m, d); } void showData() System.out.println(id); System.out.println(rank); birthday.showDate(); 2018/11/15

建構子程式設計(6/6) Ch05_01.java class Ch05_01 { public static void main(String [] args) Customer c1 = new Customer(1, 'A', 1950, 11, 20); Customer c2 = new Customer(2, 'B', 1960, 10, 20); c1.showData(); System.out.println(c1.birthday.year+"!!!"); c2.showData(); } 2018/11/15

範例1:呼叫多載建構子 class Ch03_05 { public static void main(String [] args) Rectangle rect1 = new Rectangle(); System.out.println("rect1的面積為:" + rect1.getArea()); Rectangle rect2 = new Rectangle(3,4); System.out.println("rect2的面積為:" + rect2.getArea()); } class Rectangle int height; int width; Rectangle() { height = 1; width = 1; Rectangle(int height, int width) { this.height = height; this.width = width; int getArea() { return height * width; Ch03/Ch03_05.java 2018/11/15

範例2:呼叫多載建構子(static) 結果??? 2018/11/15 class Ch03_05_01 { public static void main(String [] args) Rectangle1 rect1 = new Rectangle1(); System.out.println("rect1的面積為:" + rect1.getArea()); Rectangle1 rect2 = new Rectangle1(3,4); System.out.println("rect2的面積為:" + rect2.getArea()); } class Rectangle1 static int height; static int width; Rectangle1() { height = 1; width = 1; Rectangle1(int height, int width) { this.height = height; this.width = width; int getArea() { return height * width; 結果??? Ch03/Ch03_05_01.java 2018/11/15

建構子的呼叫(2) 使用this():建構子多載時,建構子呼叫其它建構子 的限制: 必須使用 this() 取代類別名稱()。 只能在第一個敘述呼叫。 不能造成建構子遞迴。 2018/11/15

範例3:利用this()呼叫多載建構子 class Ch03_06 { public static void main(String [] args) { System.out.println("call Date06() 結果:"); new Date06(); System.out.println("call Date06(2007) 結果:"); new Date06(2007); System.out.println("call Date06(2007,3) 結果:"); new Date06(2007,3); System.out.println("call Date06(2007,3,28) 結果:"); new Date06(2007,3,28); } class Date06 { private int day; private int month; private int year; Date06(int year, int month, int day) { this.year = year; this.month = month; this.day = day; showDate(); } Date06(int year, int month) { this(year, month, 28); } Date06(int year) { this(year, 3,28); } Date06() { this(2007, 3, 28); } void showDate() { System.out.println(year + "-" + month + "-" + day); } Ch03/Ch03_06.java 2018/11/15

範例4:建立客戶資料(1) 系統需求 建立客戶資料 顯示客戶資料 客戶編號(id) 等級(rank) 生日(birthday) Customer Int id Char rank Date birthday showData 2018/11/15

範例4:建立客戶資料(2) Class Ch03_07 class Ch03_07 { public static void main(String [] args) { new Customer(1, 'H' , 3, 28, 2007); new Customer(2, 'L', 3, 29, 2007); } Class Date07 class Date07 { private int year; private int month; private int day; Date07(int year, int month, int day) { this.year = year; this.month = month; this.day = day; String showDate() { return (year +"-" + month + "-" +day); } Class Customer class Customer { private int id; private char rank; private Date07 birthday; Customer(int id, char r, int m, int d, int y) this.id = id; rank = r; birthday = new Date07(y, m, d); showData(); } void showData() System.out.println("[客戶資料]=========="); System.out.println("編號: " + id); System.out.println("等級: " + rank); System.out.println("生日: " + birthday.showDate()); Ch03/Ch03_07.java 2018/11/15

範例4:建立客戶資料(3) 2018/11/15

範例5:建立班級學生資料(1) 系統需求: 建立學生資料 顯示學生資料、班上學生數、導師 學號(id) 操行成績(score) 導師(tecaherNo) 班上學生數(count) 顯示學生資料、班上學生數、導師 Student Int id Double score String teacherNo Int count Print Student() getStudentCount 2018/11/15

範例5:建立班級學生資料(2) Class Ch03_08 class Ch03_08 { public static void main(String [] args) { Student std1 = new Student(1, 68.0); System.out.println("學生1號: "); std1.printStudent(); Student std2 = new Student(2, 77.0); System.out.println("學生2號: "); std2.printStudent(); System.out.println("============"); System.out.println("學生人數: " + Student.getStudentCount()); System.out.println("導師: " + Student.teacherNo); System.out.println("將導師換成wang"); Student.teacherNo = "wang"; } Class Student class Student { int id; double score; static String teacherNo = "王大瑾"; static int count; Student(int id, double s) { this.id = id; score = s; count++; } static int getStudentCount() { return count; } void printStudent() System.out.println("學號: " + id); System.out.println("操行成績: " + score); 2018/11/15

範例5:建立班級學生資料(3) 2018/11/15

動動腦時間(1) class Ch03_08 { public static void main(String [] args) { Student std1 = new Student(1, 68.0); System.out.println("學生1號: "); std1.printStudent(); Student std2 = new Student(2, 77.0); System.out.println("學生2號: "); std2.printStudent(); System.out.println("============"); System.out.println("學生人數: " + Student.getStudentCount()); System.out.println("導師: " + Student.teacherNo); System.out.println("將導師換成wang"); std1.teacherNo = "wang"; } 可以嗎?why? Ch03/Ch03_08_01.java 2018/11/15

動動腦時間(2) 如何做出物件陣列?? class Ch03_08_02 { public static void main(String [] args) Student [] std = new Student[2]; System.out.println("學生1號: "); std[0] = new Student(1, 68.0); std[0].printStudent(); System.out.println("學生2號: "); std[1] = new Student(2, 77.0); std[1].printStudent(); System.out.println("====================="); System.out.println("學生人數: " + Student.getStudentCount()); System.out.println("導師: " + Student.teacherNo); } Ch03/Ch03_08_02.java 2018/11/15

活化手腦練習(1) 製作一個Box類別,這是一個盒子的類別,繪出Box 類別的UML類別圖及實作它: 成員變數:width、height和length儲存寬、高和長 建構子:Box(double width, double height、double length) 成員方法:double volume()計算體積、double area()計算 表面積 測試物件box1(3.0, 4.0, 5.0) Ch03/Ex03_03.java 2018/11/15

活化手腦練習(2) 修改範例5程式 學號為流水號從1開始,依物件建立順序自動設定 修改Student類別,成為一個可鏈結的類別 新增一個屬性next。上一個建立的物件之next會指向 新的物件來形成鏈結。 定義一個類別方法listStudent,可以列出所有鏈結的物 件屬性(id 及score) 要有兩個類別屬性,分別指向第一個物件和最後一個 物件 2018/11/15