Java 類(學習 Java 編程語言 023)

類(class)是構造對象的模板或藍圖(就是具備相同的屬性和功能的對象的抽象的集合)。由類構造(construct)對象的過程稱爲建立類的實例(instance)。 編程

類描述了具備相同特性(數據元素)和行爲(功能)的對象集合,因此一個類實際上就是一個數據類型。網絡

用 Java 編寫的全部代碼都位於某個類裏面。標準 Java 庫提供了幾千個類,可用於各類目的,如用戶界面設計、日期、日曆和網絡編程。儘管如此,在 Java 中仍是須要建立一些本身的類,以便描述你的應用程序所對應的問題領域中的對象。ide

在 Java 中,沒有類就不能作任何事情,然而,並非全部的類都表現出面向對象的典型特徵。例如 Math 類,Math 類只封裝了功能,它不須要也沒必要隱藏數據。因爲沒有數據,所以也沒必要考慮建立對象的初始化它們的實例字段。函數

類名標準的命名規範: 類名是以大寫字母開頭的名詞,若是類名由多個單詞組成,每一個單詞的第一個字母都應該大寫(這種在一個單詞中間使用大寫字母的方式稱爲駱駝命名法(camel case)。以其自身爲例,應該寫成 CamelCase)。學習

OPP 的原則:設計

  • 封裝對象

    封裝(encapsulation,有時稱爲數據隱藏)是處理對象的一個重要概念。從形式上看,封裝就是將數據和行爲組合在一個包中,並對對象的使用者隱藏具體的實現方式。對象中的數據稱爲實例字段(instance field),操縱數據的過程稱爲方法(method)。做爲一個類的實例,特定對象都有一組特定的實例字段值。這些值的集合就是這個對象的當前狀態(state)。不管什麼時候,只要在對象上調用一個方法,它的狀態就有可能發生改變。blog

    實現封裝的關鍵在於,絕對不能讓類中的方法直接地訪問其餘類的實例字段。程序只能經過對象的方法與對象數據進行交互。封裝給對象賦予了「黑盒」特徵,這是提升重用性和可靠性的關鍵。這意味着一個類能夠徹底改變存儲數據的方式,只要仍舊使用一樣的方法操做數據,其餘對象就不會知道也不用關心這個類發生的變化。繼承

  • 繼承網絡編程

    經過擴展一個類來創建另一個類的過程稱爲繼承(inheritance)

    繼承讓用戶自定義 Java 類變得垂手可得,這就是:能夠經過擴展其餘類來構建新類。事實上,在 Java 中,全部的類都源自於 Object 類。

    在擴展一個已有的類時,這個擴展後的新類具備所擴展的類的所有屬性和方法。只須要在新類中提供適用於這個新類的新方法和數據字段就能夠了。

1. 識別類

傳統的過程化程序設計,必須從頂部的 main 函數開始編寫程序。在面向對象程序設計時沒有所謂的「頂部」。學習 OOP 的初學者來講經常會感受無從下手。答案是:首先從設計類開始,而後再往每一個類中添加方法。

識別類的一個簡單經驗是在分析問題的過程當中尋找名詞,而方法對應着動詞。

所謂「找名詞與動詞」原則只是一種經驗,在建立類的時候,只有經驗才能幫助你肯定哪些名詞和動詞重要。

2. 類之間的關係

在類之間,最多見的關係有

  • 依賴(dependence):即 「uses-a」 關係,是一種最明顯的、最多見的關係。若是一個類的方法操做了另外一個類的對象,咱們就說一個類依賴於另個一個類。

    應該儘量地將相互依賴的類減至最少。若是類 A 不知道類 B 的存在,它就不會關心 B 的任何改變(這意味着 B 的改變不會致使 A 產生任何 bug)。用軟件工程的術語來講,就是儘可能減小類之間的耦合。

  • 聚合(aggregation):即 「has-a」 關係,是一種具體且易於理解的關係。聚合關係意味着類 A 的對象包含了類 B 的對象。
  • 繼承(inheritance):即 「is-a」 關係,表示一個更特殊的類與一個更通常的類之間的關係。通常而言,若是類 A 擴展類 B,類 A 不但包含從類 B 繼承的方法,還會擁有一些額外的功能。

表達類關係的 UML 符號
表達類關係的 UML 符號

相關文章
相關標籤/搜索