概述 1. 類 a. 類是構造對象的模板和藍圖 b. 由類構造對象的過程成為創建類的實例 c. 封裝從形式上看就是數據和行為組裝在一個包中,並對使用者隱藏數據的實現方式。其中的數據成為實例域,操縱數據的過程為方法。對每一個特定的類實例,都有一組特定的實例域值,成為對象的當前狀態。實現封裝的關鍵在於絕 ...
概述
1. 類
a. 類是構造對象的模板和藍圖 b. 由類構造對象的過程成為創建類的實例 c. 封裝從形式上看就是數據和行為組裝在一個包中,並對使用者隱藏數據的實現方式。其中的數據成為實例域,操縱數據的過程為方法。對每一個特定的類實例,都有一組特定的實例域值,成為對象的當前狀態。實現封裝的關鍵在於絕不能讓類中的方法直接的訪問其他類的實例域。封裝給對象賦予了“黑盒”的特征 在java中,所有的類都源自於一個“超類”,即object類。 d.繼承就是通過擴展一個類來建立另外一個類的過程。2. 對象
對象主要包含三個特征:1.對象的行為(可對對象施加哪些操作或者方法)2. 對象的狀態(對象如何響應行為)3. 對象標識(如何辨別具有相同行為與狀態的不同對象) a. 對象都保存著當前特征的信息,即對象的狀態 b. 對象狀態的改變必須通過調用某種方法去實現 c. 對象的狀態並不能完全描述一個對象(例如,兩個人身高體重甚至名字可以完全相同,但卻是兩個人)3. 類之間關係
類之間常見的關係主要有三種:
a. 依賴(“user-a”)如果一個類的方法操縱另一個類的對象,就說一個類依賴於另一個類。ps:儘量減少這種依賴關係,越少,證明其中一個類的改變對另一個類造成的bug就越少
b. 聚合(“has-a”)類A的對象包含類B的對象
c.繼承(“is-a”)類A擴展類B,則類A中不但有一些類B的方法,還會有一些類B沒有但類A獨有的方法。
--------------------------
4. 類的使用方式
首先要使用一個對象的話,必須要先a.構造對象 b.設定對象的狀態 c.進行對象的行為等操作
對應a,通過構造器(constructor,用於構造並初始化對象)構造新的對象實例
- 構造器的名字應該與類名相同
Date ndate = new Date();
具體實例
1 import java.time.*; 2 public class EmployeeTest 3 { 4 public static void main(String[] args) 5 { 6 //初始化 7 Employee[] staff = new Employee[3]; 8 staff[0] = new Employee("wang", 7000, 2017, 12, 29); 9 staff[1] = new Employee("li", 9000, 2014, 01, 20); 10 staff[2] = new Employee("han", 12000, 2015, 04, 19); 11 // 對象行為 12 for(Employee e:staff) 13 { 14 e.raiseSalary(10); 15 } 16 for(Employee e:staff) 17 { 18 system.out.println("name = " + e.getName() + "salay = " + e.getSalary() + "hireDay = " + e.getHireDay()); 19 } 20 } 21 } 22 23 class Employee 24 { 25 //實例域 26 private String name; 27 private double salary; 28 private localDate hireDay; 29 30 //構造方法 31 public Employee(String n, double s, int year, int month, int day) 32 { 33 name = n; 34 salary = s; 35 hireDay = LocalDate.of(year, month, day); 36 } 37 // 方法 38 public String getName() 39 { 40 return name; 41 } 42 public double getSalary() 43 { 44 return salary; 45 } 46 public LocalDate getHireDay() 47 { 48 return hireDay; 49 } 50 public void raiseSalary(double byPercent) 51 { 52 double raise = salary*(byPercent/100); 53 salary += raise; 54 } 55 }
番外
1. 對象與對象變數之間的區別
舉例如下:ndate就是對象變數,但不是對象,也沒有引用對象,相關的Date方法還不能應用於ndate上。
一個對象變數並沒有包含一個對象,而是引用一個對象。
任何對象變數的值都是對存儲在另一個地方的一個對象的引用,包括new 操作符也是返回的一個引用。
可以顯示的將對象變數設定為null
Date ndate; Date birthday = new Date();
ndate = birthday //引用
ndate = new Date();//初始化