ch07 : 類別與物件

人類生活的方式:物件,如手機、摩托車、電腦

7-1 物件導向的應用程式開發

7-1-1 傳統的應用程式開發

參考 page 7-2 圖

以銀行轉帳為例
getBalance(A);
withdraw(A, 1000);
deposit(B, 1000);

7-1-2 物件導向的應用程式開發

參考 page 7-3 圖

A,B為帳戶(Account)物件,提供 getBalance, withdraw, deposit 方法
甲為客戶(Customer)物件,提供 Transaction方法

7-2 物件導向基礎

物件導向程式設計(Object-oriented Programming, OOP)
人類生活在物件的世界

7-2-1 物件的基礎

物件導向三個重要觀念 物件的程式碼被隱藏起來,稱為封裝(Encapsulation)
物件擁有三種特性

7-2-2 物件導向程式語言

物件導向程式設計(OOP)三大特點

7-3 類別與物件

Java類別是一個藍圖,使用類別來建立物件
使用變數來存放物件(object),或稱為實例變數(Instance Variable)
物件使用變數來儲存狀態稱為屬性(Property),各種行為的程序與函數,Java稱為方法(Methods)

7-3-1 類別與物件

宣告類別:
public class Student {
   // 成員變數(Data Member)
   public String name;   // 姓名
   public String address;// 地址
   public int age;       // 年齡   
   // 成員方法(Method Member): 顯示學生名牌資料
   public void printNameCard() {
      System.out.println("姓名: " + name);
      System.out.println("地址: " + address);
      System.out.println("年齡: " + age);
      System.out.println("-------------------");
   }
}
宣告實例變數:
Student jeremy, joe, current, empty;
建立物件實例:
// 建立物件實例
jeremy = new Student();
joe = new Student();
current = jeremy;
empty = null;  // 指定成null參考
存取實例變數:
jeremy.name = "林書豪";  // 設定jeremy物件的變數
jeremy.address = "New York";
jeremy.age = 24;
呼叫實例方法:
jeremy.printNameCard();  // 呼叫物件的方法
joe.printNameCard();

參考 page 7-10 程式範例 Student.java

參考 page 7-10 程式範例 Ch7_3_1.java

7-3-2 成員變數的存取

Java宣告類別、成員變數,成員方法,可以加上修飾詞

參考 page 7-15 程式範例 Ch7_3_2.java

7-3-3 成員方法的使用

private 類別內部使用的方法

private boolean validAge(int a) {
	// 檢查年齡資料是否在範圍內
	if (a < 20 || a > 50)
		return false;
	else
		return true; // 合法的年齡資料
}

參考 page 7-17 程式範例 Ch7_3_3.java

7-3-4 過載方法

Java允許2個以上同名Method,只需要Signature(傳遞參數個數+資料型態)不同即可,稱為過載(Overload)
// 成員方法(1): 設定日期資料
public void setDate(int d, int m, int y) {}

// 成員方法(2): 設定日期資料
public void setDate(int d, int m) {}

// 成員方法(3): 設定日期資料
public void setDate(long d, long m, long y) {}

參考 page 7-20 程式範例 Ch7_3_4.java

7-4 類別的建構子 (Constructor)

建立物件的同時,能夠執行一些初始化的事項(例如成員變數直),需要使用 建構子(Constructor)

7-4-1 類別的建構子

類別的建構子的特點:
class Student {  // Student類別宣告
   // 建構子(1): 使用參數設定成員變數初始值
   public Student(String n, String a, int v) {    } 
   // 建構子(2): 使用參數設定成員變數初始值
   public Student(String n, String a) {  }
}

參考 page 7-23 程式範例 Ch7_4_1.java

7-4-2 使用 this 參考物件本身

this 關鍵字表示參考物件本身
class Counter { 
// 建構子
public Counter() { this(0); }

public Counter(int count) { this.count = count; }

// 過載方法: 不同型態
public Counter count(double num) {
	count += num;
	return this;
}

public Counter count(int num) {
	count += num;
	return this;
}
}

參考 page 7-25 程式範例 Ch7_4_2.java

7-5 使用物件的成員資料

Java 類別的成員除了使用基本型態(primitive)資料之外,也可以使用其它物件的物件變數,需要使用new來建立物件
birthday = new Date(m, d, y); // 建立Date物件

參考 page 7-27 程式範例 Ch7_5.java

7-6 在物件使用類別變數與方法

class Student06 { // Student06類別宣告
	public static String teacherNo = "T100";
	private static int count = 0;
	public static int getStudent06Count() { }
}

參考 page 7-30 程式範例 Ch7_6.java