- Java程序設計入門(第2版)
- (印度)沙姆·蒂克庫
- 1876字
- 2020-05-21 10:41:38
1.4 面向對象編程概念
在談論面向對象編程系統時,Java的名字總是首當其沖,因為它實現了真正的面向對象編程系統的所有要求,例如,支持數據抽象、封裝、多態、繼承。
如果一個程序是使用Java等面向對象編程語言創建的,那么類、實例、對象就是這個程序必不可少的組成部分??梢詫㈩惗x為描述不同對象的行為/狀態的模板/藍圖。對象是展示其類所定義的屬性和行為的特定元素。相同類型的對象稱為同類型(same type)或同類(same class)。一旦從類派生出對象,就形成了一個實例。對象可以采取的操作稱為方法。Java中的方法在其他語言中被稱為過程、方法、函數或子程序。
為了理解類和對象的概念,我們假定“車輛”是一個類。在“車輛”類下,可以有不同類型的車輛,例如汽車、公共汽車和卡車等,汽車、公共汽車、卡車就是“車輛”類的對象。
有一些特性促成了面向對象編程的流行。接下來我們就來談談這些特性。
1.4.1 數據抽象
用面向對象編程語言的話來說,數據抽象意味著只展示功能,隱藏實現細節。這樣做有助于掩飾多種數據的復雜性。在現實世界中,數據抽象的一個例子就是發送電子郵件,用戶只需要撰寫郵件,然后把它發送給其他用戶就可以了,不需要知道背后的內部處理過程。
1.4.2 封裝
這是面向對象編程語言的另一個特性。通過封裝,方法和數據被組合或包裝成為一個單元。換句話說,方法和數據被封裝在一起,以稱為對象的單個實體形式發揮作用,參見圖1-1。這個概念也叫作數據隱藏。在此過程中,數據無法被外部方法或過程訪問,只有與其組合在一起的方法才能訪問到數據。

圖1-1 數據和方法的封裝
1.4.3 多態
多態(Polymorphism)是一個希臘詞,其中Poly表示“很多”,morph表示“形式”。因此,多態的意思就是“一個名稱,多種形式”。在面向對象的概念中,如果單個操作扮演了多種角色,那么它就稱為多態。
多態的一個例子是方法重載。在方法重載中,多種方法可以具有相同的名稱,但各自擁有不同的參數數量。例如,有一個名為calculate的類,包含了calculate_area(l,b)和calculate_area(s)兩個方法。兩者的名稱都是calculate_area,但是擁有的參數數量不同。因此,當用戶傳入兩個值時,將調用具有兩個參數的方法calculate_area(l,b);當用戶傳入單個值時,可以調用具有單個參數的方法calculate_area(s)。
1.4.4 繼承
繼承是面向對象編程的關鍵特性。它帶來的好處是能夠重用對象的方法和屬性,因而可以減少Java程序的代碼行數。如果我們創建了一個類,在其中以屬性和方法的形式定義了若干特性。隨后,我們需要創建另一個類,該類除現有類的所有特性(屬性和方法)之外,還具有一些新的特性(屬性和方法)。在這種情況下,無須再單獨創建一個類。我們可以從現有類中派生出新類,在新類中添加新特性。這樣就能夠避免重復同樣的代碼。
從技術上來說,繼承是一種從現有類中派生出新類的技術,可以在新類中重用現有類的特性。派生出的類也稱為次類(sub-class)或子類(child class),用于派生出新類的類稱為超類(super class)、基類(base class)或父類(parent class)。圖1-2通過圖示,以簡單直觀的方式描述了繼承的概念。

圖1-2 繼承的概念
如圖1-2所示,Vehicles是一個基類,擁有Two Wheeler和Four Wheeler兩個子類。這兩個子類分別又擁有Honda和Suzuki、Toyota和BMW兩個子類。因此,Two Wheeler和Four Wheeler是其子類的基類,Vehicles是其所有子類的基類。
在Java中,主要包含以下3種繼承類型。
●單一繼承(Single Inheritance)。
●多級繼承(Multilevel Inheritance)。
●層次繼承(Hierarchical Inheritance)。
1.單一繼承
如果從單個父類中派生出單個類,就叫作單一繼承。圖1-3展示了這一概念,其中,類B繼承了類A的屬性。

圖1-3 單一繼承的概念
2.多級繼承
如果一個類是從另一個派生類中派生出來的,就叫作多重繼承。圖1-4展示了這一概念,其中,類C繼承了類B的屬性,而類B又是類A的子類。

圖1-4 多級繼承的概念
3.層次繼承
如果從單個基類中派生出多個類,就叫作層次繼承。圖1-5 展示了層次繼承的概念,其中,類B和類C繼承了類A的屬性。

圖1-5 層次繼承的概念
在面向對象編程中,還有一種繼承類型叫作多重繼承(multiple inheritance)。在多重繼承中,一個類派生自多個父類。Java的設計者認為這種繼承太過復雜,與保持Java簡單性的觀念不能很好地契合。因此,Java并沒有實現多重繼承。圖1-6展示了多重繼承的概念。

圖1-6 多重繼承的概念
Java能夠借助接口實現多重繼承的要求。接口是面向對象編程的另一個重要特性,接下來將會講到。
1.4.5 接口
接口是類的藍圖。它與類非常相似,但只包含抽象方法。抽象方法是僅有聲明但不包含任何實現的方法。接口可能也包含常量、方法簽名、默認方法、靜態方法,但它不具有任何構造函數,因此無法被實例化。接口只能由類來實現或者通過其他接口擴展。類繼承接口的抽象方法來實現它。我們可以使用接口實現抽象和多重繼承,還可以從任意數量的接口派生類。圖1-7展示了接口的概念,其中,類C繼承了接口A和接口B以及類A的屬性。

圖1-7 接口的概念
- Web前端開發技術:HTML、CSS、JavaScript(第3版)
- Oracle WebLogic Server 12c:First Look
- Mastering Scientific Computing with R
- Lua程序設計(第4版)
- Spring實戰(第5版)
- PostgreSQL Replication(Second Edition)
- SQL Server從入門到精通(第3版)
- Java Web開發詳解
- C/C++數據結構與算法速學速用大辭典
- Django Design Patterns and Best Practices
- Learning Jakarta Struts 1.2: a concise and practical tutorial
- Shopify Application Development
- Java多線程并發體系實戰(微課視頻版)
- FusionCharts Beginner’s Guide:The Official Guide for FusionCharts Suite
- 循序漸進Vue.js 3前端開發實戰