Presentation is loading. Please wait.

Presentation is loading. Please wait.

Ch02 類別、物件及屬性 物件導向程式設計(II).

Similar presentations


Presentation on theme: "Ch02 類別、物件及屬性 物件導向程式設計(II)."— Presentation transcript:

1 Ch02 類別、物件及屬性 物件導向程式設計(II)

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

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

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

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

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

7 範例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

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

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

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

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

12 範例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

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

14 活化腦、手運動(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

15 範例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

16 如果,你不想讓一些資料隨便被人更改,或是一些固定值,或是你的生日不變
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

17 範例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

18 範例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

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

20 範例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

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

22 JAVA程式設計 以[大富翁]為例

23 V1:認識類別及物件 屬性設定

24 大富翁主方法(大富翁.java) class 玩家 { String 名字; int 錢 = 2000; int 位置 = 0; }
public static void main(String [] args) 玩家 P = new 玩家(); P.名字 = "喜羊羊"; P[i].位置 += ((int)(Math.random()*11) + 2); System.out.println(P.名字 + " 在 " + P.位置); }

25 v2:利用陣列宣告多個物件

26 大富翁主方法(大富翁.java) class 大富翁 class 玩家 { {
public static void main(String [] args) 玩家 P [] = new 玩家[4]; for (int i = 0; i < P.length; i++) P[i] = new 玩家(); } P[0].名字 = "喜羊羊"; P[1].名字 = "美羊羊"; P[2].名字 = "小灰灰"; P[3].名字 = "灰太狼"; for(int i = 0; i < P.length; i++) P[i].位置 += ((int)(Math.random()*11) + 2); System.out.println(P[i].名字 + " 在 " + P[i].位置); class 玩家 { String 名字; int 錢 = 2000; int 位置 = 0; } class 土地 String 地名;

27 Homework#1 寫一個程式,讓4個玩家輪流前進10輪

28 V3:讓4位玩家輪流玩,共玩10輪 新增土地類別及40塊土地

29 class 玩家 { String 名字; int 錢 = 2000; int 位置 = 0; } class 土地 String 地名;

30 class 大富翁 { public static void main(String [] args) String [] 土地名 = {"中華民國", "日本", "韓國", "菲律賓", "馬來西亞", "越南", "泰國", "印度", "伊拉克", "伊朗", "沙烏地阿拉伯", "土耳其", "以色列", "蘇俄", "波蘭", "德國", "奧地利", "瑞士", "法國", "比利時", "荷蘭", "英國", "芬蘭", "瑞典", "丹麥", "希臘", "義大利", "西班牙", "葡萄牙", "埃及", "摩洛哥", "南非", "加拿大", "美國", "墨西哥", "宏都拉斯", "尼加拉瓜", "古巴", "巴拿馬", "巴西"} ;

31 土地 L [] = new 土地[40]; for (int i = 0; i < L.length; i++)
{ L[i] = new 土地(); L[i].地名 = 土地名[i]; System.out.println(L[i].地名); } 玩家 P [] = new 玩家[4]; for (int i = 0; i < P.length; i++) { P[i] = new 玩家(); P[0].名字 = "喜羊羊"; P[1].名字 = "美羊羊"; P[2].名字 = "小灰灰"; P[3].名字 = "灰太狼";

32 for(int j = 1; j <= 10; j++) { for(int i = 0; i < P
for(int j = 1; j <= 10; j++) { for(int i = 0; i < P.length; i++) { P[i].位置 += ((int)(Math.random()*11) + 2); if (P[i].位置 >= 40) P[i].位置 -= 40; System.out.println(P[i].名字 + “ 在 ” + L[P[i].位置].地名); }

33 Homework #2 將程式中每一個class都各自成立一個檔案(讓程式減輕),並且編譯及執行


Download ppt "Ch02 類別、物件及屬性 物件導向程式設計(II)."

Similar presentations


Ads by Google