《Java設計模式及實踐》—1.2.2 面向對象編程
1.2.2 面向對象編程

面向對象編程經常與命令式編程聯系在一起,在實踐當中,兩者是可以共存的。Java就是這種協作的生動證明。
接下來,我們將簡要介紹面向對象的基本概念,代碼都會以Java語言實現。
1.對象和類
對象是面向對象編程(OOP)語言的主要元素,它包括狀態和行為。
如果我們將類視為模板,則對象是模板的實現。例如,如果“?人類?”是一個定義了人類所擁有的屬性和行為的類,那么你我都是這個“?人類?”類的對象,因為我們已經滿足了作為“?人類?”所有的要求。或者,我們把“?汽車?”視為一個類,那么一輛特定的本田思域汽車就是“?汽車?”類的一個對象。這輛本田思域汽車可以滿足汽車類所具備的所有屬性和行為,比如有引擎、方向盤、車燈等,還能前進、倒退等。我們可以看到面向對象范式如何與現實世界相關聯。幾乎現實世界中的所有東西都可以從類和對象的角度來考慮,因此OOP能夠毫不費力地流行起來。
面向對象基于四個基本原則:
封裝
抽象
繼承
多態
2.封裝
封裝主要是指屬性和行為的綁定。封裝的思路是將對象的屬性和行為保存在一個地方,以便于維護和擴展。封裝還提供了一種隱藏用戶所不需要的細節的機制。在Java當中,我們可以為方法和屬性提供訪問說明符來管理類使用者的可見內容以及隱藏內容。
封裝是面向對象語言的基本原則之一。封裝有助于不同模塊的分離,使得開發人員可以或多或少地獨立開發和維護解耦模塊。在內部更改解耦模塊/類/代碼而不影響其外部暴露行為的技術稱為代碼重構。
3.抽象
抽象與封裝密切相關,并且在某種程度上它與封裝重疊。簡而言之,抽象提供了一種機制,這種機制使得對象可以公開它所做的事,而隱藏它是如何做到這些事的。
我們拿現實世界中的“?汽車?”作為例子來說明抽象。為了駕駛一輛汽車,我們并不需要知道汽車引擎蓋下是什么樣的,我們只需要知道它給我們暴露的數據和行為。數據顯示在汽車的儀表盤上,行為就是我們可以用控制設備來駕駛汽車。
4.繼承
繼承是指對象或類基于另一個對象或類的能力。有一個父類或者基類,它為實體提供頂級行為。每一個滿足“?父類的屬性和方法是子類的一部分?”條件的子類實體或者子類都可以從父類中繼承,并根據需要添加其他行為。
讓我們來看一個現實世界的例子。如果我們將Vehicle視為父類,我們知道Vehicle
類可以具有某些屬性和行為。例如,Vehicle類有一個引擎、好幾個門等等,并且它擁有移動這個行為。現在滿足這些條件的所有實體(例如Car、Truck、Bike等),都可以從Vehicle類繼承并添加給定的屬性和行為。換句話說,我們可以說Car是一種Vehicle。
讓我們來看代碼如何實現。我們首先創建一個名為Vehicle的基類,此類擁有一個構造函數,這個函數能夠接受一個String(字符串)類型的參數(車輛名稱):
現在我們創建一個擁有構造函數的Car類。Car類繼承自Vehicle類,因此它繼承并可以訪問在基類中聲明為protected(保護)或public(公共)的所有成員和方法:
5.多態
從廣義上講,多態為我們提供了讓不同類型的實體使用相同接口的選項。主要有兩種類型的多態:編譯時多態和運行時多態。有一個Shape類,擁有兩個計算面積的方法。一個方法計算一個圓的面積,它接受一個整數,也就是說,輸入半徑并返回這個圓的面積。另一個方法計算矩形的面積,它需要兩個輸入—長度和寬度。編譯器可以根據調用參數的數量來決定調用哪個面積方法。這是編譯時多態。
有些技術人員認為,只有運行時多態才是真正的多態。運行時多態(有時也稱為子類型多態)在子類繼承父類并覆蓋其方法時起作用。在這種情況下,編譯器無法決定最終是執行子類的實現還是父類的實現,只能在運行時決定。
為了詳細說明,我們采用前面的示例并向車輛類型添加新方法以打印對象的類型和名稱:
我們在派生的Car類中重寫相同的方法:
現在我們可以看到行為中的子類型多態。我們創建一個Vehicle對象和一個Car對象,將每個對象聲明為Vehicle變量類型(因為Car也是Vehicle)。然后我們為每個對象調用toString方法。vehicle1是Vehicle類的一個實例,它將調用Vehicle.toString()方法。vehicle2是Car類的一個實例,它將調用Car類的toString方法:
面向對象編程 Java
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。