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

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

第3-2章 类与 对象 Java类的特性 教学内容: 类的私有成员与公共成员 方法的重载 构造方法 实例成员与静态成员 重点: 重载 难点:
单元二:面向对象程序设计 任务二:借书卡程序设计.
第四章 类、对象和接口.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第一單元 建立java 程式.
项目6 通用堆栈.
大葉大學 指導教授: 黃鈴玲 學生: 林慶南(工業工程與科技管理所)
四資二甲 第三週作業 物件導向程式設計.
Chapter 6 字串與時間處理.
Ch03 物件導向程式設計_物件與類別 JAVA 程式設計入門(II).
第二章 JAVA语言基础.
Ch07 介面與多重繼承 物件導向程式設計(II).
第三章 控制结构.
Ch08 巢狀類別 物件導向程式設計(II).
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
Ch03 類別與物件 物件導向系統分析與設計.
Java簡介.
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
Ch03 方法 物件導向程式設計(II).
Ch10 類別與物件-方法 Java程式設計(2).
程式設計實作.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
Java程序设计 第9章 继承和多态.
程式設計(二) 進階類別 郭文真 Sabrina Kuo.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
第一單元 建立java 程式.
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第 19 章 XML記憶體執行模式.
第三课 标识符、关键字、数据类型.
物件導向系統分析與設計 CH04 物件導向開發方法.
Ch09 物件導向技術導論(二) Java程式設計(2).
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
樣版.
第三章 数据抽象.
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
Ch06 抽象類別和多形 物件導向程式設計(2).
陣列與結構.
龍老師我不會Debug QQ.
第二章 Java基本语法 讲师:复凡.
Chinese II Lesson 14 Birthday & Celebrations
簡單Java介紹.
Quiz1 繳交期限: 9/28(四).
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
開發Java程式語言的工具 JDK.
判斷(選擇性敘述) if if else else if 條件運算子.
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
第6章 继承和多态 伍孝金
Summary
方法(Method) 函數.
InputStreamReader Console Scanner
Presentation transcript:

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

類別的定義-類別的定義語法 修飾字 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

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

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

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

大富翁主方法(大富翁.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.位置); }

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

大富翁主方法(大富翁.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 地名;

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

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

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

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

土地 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].名字 = "灰太狼";

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].位置].地名); }

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