這一章能夠說是 Java 的重中之重,沒錯衆所周知,Java 是 面向對象 編程,這一章講的就是 對象與 類。算法
一、概述:編程
A、面向對象程序設計,簡稱(OOP),Java 是徹底面向對象的,必須熟悉 OOP 纔可以編寫 Java 程序。數組
B、面向對象的程序是由對象組成的,每一個對象包含對用戶公開的特定功能部分和隱藏的實現部分。數據結構
C、程序中的不少對象來自標準庫,還有一些事自定義的。編程語言
D、只要對象可以知足要求,沒必要關心其功能的具體實現過程。ide
E、在面向過程的程序中,算法是放在第一位,而數據結構是放在第二位;OOP 把這個次序調轉,把數據放在第一位,算法/操做數據的算法放在後面。函數
二、類:spa
A、類(class)是構造對象的模板 或 藍圖。設計
B、由 類 構造(construct)對象的過程稱爲建立類的實例(instance)。指針
C、OOP 的原則,讓用戶自定Java 的類,變得更加容易,就是:能夠經過擴展一個類來創建另外一個新的類。
D、在 Java 中,全部的類都源自一個 "神通廣大的超類" Object。
E、在擴展一個已有的類時,這個擴展後的新類具備所擴展的類的所有屬性和方法。
F、經過擴展一個類來創建另外一個類的過程叫 繼承(inheritance)。
G、類之間的關係:
關係 | 描述 |
依賴("uses-a") | A、依賴(dependence),即 "uses-a" 關係,是一種最明顯的、最多見的關係。 B、若是一個 類/A 的方法操做另外一個 類/B 的對象,咱們能夠說這個 類/A 依賴 另外一個 類/B。 C、將相互依賴的類減至最少,能夠減小一些由於修改類而致使的Bug 出現,這就是所謂的耦合度最小。 D、上面 C 的說法,就是減小相互依賴的類,其實就是低耦合的說法。 |
聚合("has-a") | A、聚合(aggregation),即 "has-a" 關係。 B、聚合意味着 類A 的對象,包含着一些 類B 的對象 C、在 Java 的核心技術中,做者建議咱們用聚合這個詞,而不是用關聯。 |
繼承("is-a") | A、繼承(inheritance),即 "is-a" 關係。 |
三、對象:
A、要使用 OOP, 必定要清楚對象的三個主要特性:
* 對象的行爲(behavior)—— 能夠對對象施加哪些操做,或者能夠對對象施加哪些方法。
* 對象的狀態(state)—— 當施加哪些方法時,對象如何響應
* 對象標識 (identity)—— 如何辨別具備相同行爲與狀態的不一樣對象
B、對象的狀態必須經過調用方法實現(若是不通過方法調用就能夠改變狀態,只能說明封裝性遭到破壞)。
C、要想使用對象,就必須先構建對象,並指定初始狀態;而後再對對象應用方法。
D、在 Java 中,是使用 構造器(constructor)構造新的實例;構造器是一種特殊的方法,用來構造並初始化對象。
E、想要構造一個對象,須要在構造器前面 加上 new 操做符
/// 例以下面的 Date 類,咱們要構造一個 Date 對象
/// Date 就是構造器。
/// 構造器的名稱 要跟類名同樣。
/// 構造器,老是伴隨着 new 操做符的執行被調用,而不能對一個已經存在的對象調用構造器來達到從新設置實例域的目的。 Date dateObj = new Date(); /// JavaScript: class 類名 { /// constructor 是構造函數 / 也叫構造器,多是 Java 習慣叫 構造器 constructor() {}
}
F、對象和對象變量之間 存在一個重要的區別,對象變量,它是未引用對象,只聲明瞭的變量。不能使用類的方法。
G、Java 中的對象變量,能夠理解成 C++ 中的指針,大概意思就是,編程語言在 內存中 建立好一個對象,放在那裏,而後變量名只是指向這一塊內存的地址。
H、因此 爲何上一章的 數組賦值 是淺拷貝。
I、在 Java 中,最簡單的類定義形式爲:
class ClassName { field 1 field 2 ... /// 其中 constroctor 是 Java 中,類的構造函數, /// 這裏不是有多個構造函數,而是一個方法重載的概念,我在下一章會說。
/// Java 中的構造函數,是跟類名相同的,這點跟JavaScript 的不一樣,JavaScript 的構造函數,是 constructor() 這個固定名稱 constructor1 constructor2 ...
/**
* A、Java 中的實例域,即,類的字段(屬性),局部的,全局的。在實例化後變成了 對象的 屬性或者字段,這個時候就叫作實例域
* 對比了一下,應該在 constructor 中有 賦值的 類屬性/字段,實例化後,帶的屬性,都叫實例域,由於在實例中能訪問到。
* B、靜態域,也叫 類域,應該就是上面 field 使用 static 定義後的屬性。
* 意思準不許確很差說,我先這樣認爲先,後面更加清楚後,會修改,這裏我的建議本身去查意思。
*/ method1 method2 ... }