關(guān)于我們
書單推薦
新書推薦
|
Java編程實(shí)戰(zhàn)寶典(附光盤) “開發(fā)寶典叢書”是由清華大學(xué)出版社為軟件開發(fā)愛好者精心打造的一套軟件開發(fā)百科全書。叢書強(qiáng)調(diào)“全面、新穎、詳細(xì)、實(shí)用、深入、高效”等特色,涵蓋常見的編程語言和技術(shù)。叢書中的每本書都是由從事軟件開發(fā)多年、具備豐富的開發(fā)經(jīng)驗(yàn)的老手精心編寫,講解細(xì)膩,內(nèi)容實(shí)用,并精心錄制了配套教學(xué)視頻。可以說,這套叢書是編程愛好者系統(tǒng)學(xué)習(xí)軟件開發(fā)技術(shù)的不二選擇,一冊(cè)在手,萬事無憂!
《Java編程實(shí)戰(zhàn)寶典》以J2SE為平臺(tái),以最新的JDK1。7技術(shù)規(guī)范為切入點(diǎn),全面、系統(tǒng)地介紹了Java的基礎(chǔ)編程技術(shù)和常用開發(fā)方法。書中的各個(gè)技術(shù)點(diǎn)都提供了實(shí)例以供讀者實(shí)戰(zhàn)演練,各章最后還提供了實(shí)戰(zhàn)練習(xí)題以幫助讀者鞏固和提高。本書配1張DVD光盤,內(nèi)容為書中涉及的實(shí)例源文件及作者專門為本書錄制的配套教學(xué)視頻,以幫助讀者更加高效、直觀地學(xué)習(xí)本書內(nèi)容。另外,光盤中還贈(zèng)送了大量的Java范例、模塊及項(xiàng)目案例開發(fā)的源程序和教學(xué)視頻,非常超值。
超值、大容量DVD光盤 本書實(shí)例源文件 18小時(shí)配套教學(xué)視頻 23小時(shí)Java開發(fā)實(shí)例教學(xué)視頻 4個(gè)Java項(xiàng)目案例源程序及3小時(shí)教學(xué)視頻 100頁本書第8篇內(nèi)容的電子書 355頁《Java程序員面試寶典》電子書
一分鐘了解本書精華內(nèi)容
Java的開發(fā)運(yùn)行環(huán)境(57分鐘視頻) Java語言基礎(chǔ)(75分鐘視頻) 對(duì)象和類(33分鐘視頻) 繼承與多態(tài)(35分鐘視頻) 數(shù)組與字符串(69分鐘視頻) Java的異常處理(58分鐘視頻) Java輸入輸出處理技術(shù)(110分鐘視頻) Java的多線程機(jī)制(83分鐘視頻) 運(yùn)行時(shí)類型識(shí)別(37分鐘視頻) 泛型(18分鐘視頻) Java集合框架(20分鐘視頻) 類型包裝器、自動(dòng)裝箱和元數(shù)據(jù)(21分鐘視頻) 常用工具類(74分鐘視頻) GUI程序設(shè)計(jì)(29分鐘視頻) Java多媒體編程應(yīng)用(16分鐘視頻) 數(shù)據(jù)庫基礎(chǔ)(47分鐘視頻) Java數(shù)據(jù)庫編程技術(shù)(110分鐘視頻) Java網(wǎng)絡(luò)編程技術(shù)(78分鐘視頻) JSP程序設(shè)計(jì)(42分鐘視頻) 即時(shí)通訊系統(tǒng)開發(fā)項(xiàng)目實(shí)戰(zhàn)(71分鐘視頻) 一本百科全書式的Java編程秘笈,全面、新穎、詳細(xì)、深入和實(shí)用 資深程序員15年開發(fā)經(jīng)驗(yàn)的總結(jié),完美展現(xiàn)Java應(yīng)用開發(fā)的精髓 18小時(shí)配套教學(xué)視頻 + 26小時(shí)進(jìn)階教學(xué)視頻,贈(zèng)送100頁本書項(xiàng)目案例開發(fā)電子書及355頁《Java程序員面試寶典》電子書 全面:涵蓋Java基礎(chǔ)語法、面向?qū)ο、多線程、集合、泛型、GUI編程、多媒體編程、數(shù)據(jù)庫編程和網(wǎng)絡(luò)編程等內(nèi)容 新穎:以當(dāng)前最流行的JDK 1.7進(jìn)行講解,詳細(xì)介紹了大量的新技術(shù)和新功能 詳細(xì):結(jié)合圖示,從概念、語法、示例、技巧和應(yīng)用等多角度分析每個(gè)知識(shí)點(diǎn) 實(shí)用:提供了450個(gè)實(shí)例、6個(gè)小案例、1個(gè)項(xiàng)目開發(fā)案例、346個(gè)習(xí)題 深入:深入剖析Swing包、實(shí)用工具類、集合、泛型等其他書中很少透徹介紹的內(nèi)容 高效:提供了18小時(shí)配套教學(xué)視頻及26小時(shí)Java進(jìn)階視頻,高效而直觀
Java是目前最為流行的程序開發(fā)語言。市面上介紹Java的書籍很多,既包括國外的經(jīng)典名著,也包括國內(nèi)各種各樣的教學(xué)書籍。國外名著由于知識(shí)背景的差異,作者的思維方式總是和中國讀者有一定的距離,因此剛?cè)腴T的讀者無法領(lǐng)略其中的精妙。大多數(shù)國外書籍,則將Java當(dāng)作純粹的語言來介紹,忽視了它作為一個(gè)應(yīng)用平臺(tái)的強(qiáng)大威力,讀者看了之后,難免會(huì)誤會(huì)Java不過是一個(gè)精簡(jiǎn)版的C++。
筆者在多年的教學(xué)和開發(fā)實(shí)踐中,深感需要編寫一本既能讓初學(xué)者快速入門,又能真正利用Java進(jìn)行軟件開發(fā)的指導(dǎo)性書籍。幾年前筆者就萌生了一個(gè)想法:親自編寫一本既適合讀者自學(xué),又可供教學(xué)參考的Java圖書。而真正付諸實(shí)施,這本書花了筆者近一年的時(shí)間。筆者在自己平時(shí)所用課件的基礎(chǔ)上,進(jìn)行了大量增改,終于編寫出了本書。本書以J2SE為平臺(tái),以最新的JDK 1.7技術(shù)規(guī)范為切入點(diǎn),由淺入深、循序漸進(jìn)地介紹了有關(guān) J2SE平臺(tái)下的大部分常用開發(fā)技術(shù)。書中的每個(gè)知識(shí)點(diǎn)和技術(shù)都采用了實(shí)例講解為主、理論分析為輔的方式進(jìn)行介紹。 本書假設(shè)讀者沒有任何編程經(jīng)驗(yàn),舉例時(shí)也盡量避免復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計(jì)。每個(gè)例子都著重于Java知識(shí)點(diǎn)本身,盡量淺顯易懂,不涉及其他知識(shí)。對(duì)于初學(xué)者易犯的錯(cuò)誤,都有明確的提示。為了讓讀者養(yǎng)成良好的編程習(xí)慣,本書的程序代碼均按照軟件工程的規(guī)范來編寫。全書講解時(shí)配合了大量的程序示例、實(shí)用程序、圖例及代碼說明,所有程序代碼筆者均仔細(xì)調(diào)試過,確保準(zhǔn)確無誤。 本書特色 本書是根據(jù)筆者多年的教學(xué)和軟件開發(fā)經(jīng)驗(yàn)總結(jié)出來的,將知識(shí)范圍鎖定在了適合初、中級(jí)讀者閱讀的部分。本書以大量的實(shí)例進(jìn)行示范和解說,其特點(diǎn)主要體現(xiàn)在以下幾個(gè)方面。 * 內(nèi)容全面,涵蓋廣泛:本書全面涵蓋了Java的基礎(chǔ)語法、面向?qū)ο缶幊、Java高級(jí)技術(shù)中的多線程、集合、泛型和RTTI等,而且系統(tǒng)介紹了GUI程序設(shè)計(jì)、多媒體程序設(shè)計(jì)、數(shù)據(jù)庫程序設(shè)計(jì)和網(wǎng)絡(luò)程序設(shè)計(jì)等。 * 技術(shù)最新,緊跟趨勢(shì):本書以最新的JDK 1.7技術(shù)規(guī)范為切入點(diǎn)進(jìn)行講解,詳細(xì)介紹了新版本的各種新技術(shù)和新功能,讓讀者了解和掌握最新的Java技術(shù)。 * 由淺入深,循序漸進(jìn):本書的編排采用了由淺入深、循序漸進(jìn)的方式,使得初、中級(jí)讀者都可以容易地掌握復(fù)雜的編程技術(shù)。 * 實(shí)例豐富,講解詳細(xì):本書提供了大量的示例和實(shí)例,并按照“知識(shí)點(diǎn)→例或?qū)嵗纠驅(qū)嵗馕觥\(yùn)行效果→貼心提示”的模式講解,理解起來非常容易。書中給出了這些例子的詳細(xì)源代碼,并對(duì)代碼進(jìn)行了詳細(xì)注釋,還對(duì)例子的重點(diǎn)和難點(diǎn)進(jìn)行了詳細(xì)的講解和分析。書中的例子簡(jiǎn)潔規(guī)范,能讓讀者專心于知識(shí)點(diǎn),而不被其他事情所干擾。它們大多具有實(shí)際意義,著重于解決工作中的實(shí)際問題,可幫助讀者理解和上機(jī)模擬實(shí)踐。 * 案例精講,注重實(shí)戰(zhàn):本書最后用3章的篇幅詳細(xì)介紹了一個(gè)完整的即時(shí)通信軟件項(xiàng)目案例的設(shè)計(jì)和實(shí)現(xiàn)過程,讓讀者體驗(yàn)實(shí)際的項(xiàng)目開發(fā),提升開發(fā)水平。 * 實(shí)踐練習(xí),鞏固提高:本書各章都提供了實(shí)踐練習(xí)題,讀者每閱讀完一章,可以通過完成這些練習(xí)題來檢測(cè)自己的學(xué)習(xí)效果,從而達(dá)到鞏固和提高的目的。 * 視頻教學(xué),光盤超值:筆者專門錄制了大量的配套多媒體教學(xué)視頻,便于讀者更加高效、直觀地學(xué)習(xí)。另外,配書光盤中還贈(zèng)送了大量的Java開發(fā)范例、模塊和案例的源程序及教學(xué)視頻庫,并提供了一部《Java程序員面試寶典》電子書。 本書內(nèi)容安排 本書共22章,分為8篇,不僅包含了Java的基礎(chǔ)知識(shí),也對(duì)它的高級(jí)技術(shù)和實(shí)用技術(shù)做了詳細(xì)介紹。 第1篇 Java基礎(chǔ)知識(shí)入門(第1、2章) 本篇首先全面介紹了Java的運(yùn)行開發(fā)環(huán)境。其中詳細(xì)講解了JDK的安裝和配置,如何使用UltraEdit來編輯一個(gè)Java源程序,以及如何編譯和運(yùn)行Java程序。第2章介紹了Java的基礎(chǔ)知識(shí),包括數(shù)據(jù)類型、運(yùn)算符與表達(dá)式、流程控制等。最后以幾個(gè)實(shí)例來引導(dǎo)讀者步入程序設(shè)計(jì)的大門。這一篇是整個(gè)Java程序設(shè)計(jì)的基礎(chǔ)。 第2篇 對(duì)象和類(第3、4章) 本篇介紹了如何使用Java來進(jìn)行面向?qū)ο蟮某绦蛟O(shè)計(jì)。包括對(duì)象和類的成員定義與使用、單繼承和多重繼承、運(yùn)行時(shí)多態(tài)、接口、內(nèi)部類、包等。本篇是Java的精華,也是學(xué)習(xí)Java面向?qū)ο蠹夹g(shù)必備的知識(shí)。 第3篇 數(shù)據(jù)處理(第5~7章) 本篇介紹了Java中的數(shù)據(jù)處理。首先介紹了Java中的兩個(gè)特殊類:數(shù)組和字符串。然后介紹了Java中的異常處理機(jī)制。最后介紹了輸入和輸出,包括標(biāo)準(zhǔn)設(shè)備的輸入和輸出以及文件的處理,還對(duì)新版JDK 1.7中有關(guān)Java輸入與輸出新增技術(shù)進(jìn)行了說明。學(xué)完本篇,已經(jīng)可以編寫一些實(shí)用程序了。 第4篇 Java中的高級(jí)技術(shù)(第8~13章) 本篇介紹了Java中的高級(jí)技術(shù),包括多線程、RTTI、泛型、集合、類型包裝以及實(shí)用工具類等。這些內(nèi)容是編寫復(fù)雜實(shí)用程序的基礎(chǔ)。使用這些高級(jí)技術(shù),可以大大降低編程的煩瑣程度和難度。 第5篇 GUI程序設(shè)計(jì)(第14、15章) 本篇介紹了普通窗口程序和多媒體程序的編寫。GUI是目前最為流行的程序界面,但這類程序的編制比普通控制臺(tái)程序要復(fù)雜一些。本篇詳細(xì)介紹了和GUI有關(guān)的事件、布局管理以及各種組件的使用。并通過大量的實(shí)例來介紹如何編寫一個(gè)實(shí)用的桌面程序,以及編程中的常用技巧和應(yīng)該注意的問題。在多媒體程序設(shè)計(jì)中,則著重介紹了各種文字、圖像、聲音和視頻的處理。在編程中,應(yīng)盡量使用Java自己提供的類,以降低編程的難度。 第6篇 數(shù)據(jù)庫程序設(shè)計(jì)(第16、17章) 本篇介紹了數(shù)據(jù)庫程序設(shè)計(jì)。數(shù)據(jù)庫編程是Java的一個(gè)重要應(yīng)用方面。本篇先介紹一般性的數(shù)據(jù)庫理論,主要是SQL語句的使用。然后詳細(xì)介紹了如何使用Java中的各種類來處理數(shù)據(jù)庫,并提供了一個(gè)實(shí)例來說明編寫數(shù)據(jù)庫程序與普通程序的一些差別。 第7篇 Java網(wǎng)絡(luò)程序開發(fā)(第18、19章) 本篇介紹了網(wǎng)絡(luò)程序設(shè)計(jì)。首先介紹一般的C/S模式的網(wǎng)絡(luò)程序設(shè)計(jì),主要是利用Socket進(jìn)行網(wǎng)絡(luò)通信。隨后介紹了JSP程序設(shè)計(jì),這是Java應(yīng)用的又一重要領(lǐng)域。另外,本篇提供了5個(gè)實(shí)例來說明JSP程序設(shè)計(jì)中應(yīng)該注意的一些問題。 第8篇 即時(shí)通信系統(tǒng)開發(fā)項(xiàng)目實(shí)戰(zhàn)(第20~22章) 本篇講解了一個(gè)以QQ為原型的Java版即時(shí)通信系統(tǒng)的應(yīng)用開發(fā)案例,綜合使用了Java中的桌面程序設(shè)計(jì)、圖像處理、數(shù)據(jù)庫處理以及網(wǎng)絡(luò)通信中的各種技術(shù),以及軟件工程的思想,對(duì)Java應(yīng)用系統(tǒng)從架構(gòu)設(shè)計(jì)、數(shù)據(jù)設(shè)計(jì)到編碼開發(fā)都進(jìn)行了細(xì)致的講解。最后兩章是對(duì)Java技術(shù)的一個(gè)全面應(yīng)用綜合演練。通過這個(gè)軟件,讀者可以領(lǐng)略到Java的強(qiáng)大實(shí)用編程能力。因篇幅所限,本篇內(nèi)容以PDF電子文檔的格式收錄于本書的配套光盤中。 本書光盤內(nèi)容 * 本書各章涉及的實(shí)例源文件; * 18小時(shí)本書配套教學(xué)視頻; * 23小時(shí)Java開發(fā)實(shí)例教學(xué)視頻; * 4個(gè)Java項(xiàng)目案例源程序及3小時(shí)教學(xué)視頻; * 100頁本書第8篇內(nèi)容的電子書; * 355頁《Java程序員面試寶典》電子書。 適合閱讀本書的讀者 * 想全面學(xué)習(xí)Java開發(fā)技術(shù)的人員; * 沒有任何編程基礎(chǔ)的計(jì)算機(jī)專業(yè)的學(xué)生; * 具備一定自學(xué)能力的Java編程愛好者; * 利用Swing開發(fā)桌面程序的Java程序員; * 進(jìn)行JSP網(wǎng)站開發(fā)的人員; * 使用C/S模式設(shè)計(jì)網(wǎng)絡(luò)程序的Java程序員; * 想了解Java中、高級(jí)技術(shù)的編程人員; * 使用Java做開發(fā)的工程技術(shù)人員和科研人員; * 大中專院校Java語言的教學(xué)人員; * 需要案頭必備手冊(cè)的Java程序員。 本書作者 本書由劉新和管磊主筆編寫。其他參與編寫的人員有陳小云、陳曉梅、陳欣波、陳智敏、崔杰、戴晟暉、鄧福金、董改香、董加強(qiáng)、杜磊、杜友麗、范祥、方家娣、房健、付青、傅志輝、高德明、高雁翔、宮虎波、古超、桂穎、郭剛、郭立峰、郭秋滟、韓德、韓花、韓加國、韓靜、韓偉、何海訊、衡友躍、李寧、李錫江、李曉峰、劉建準(zhǔn)。 本書的編寫對(duì)筆者而言是一個(gè)“浩大的工程”。雖然筆者投入了大量的精力和時(shí)間,但只怕百密難免一疏。若讀者在閱讀本書時(shí)發(fā)現(xiàn)任何疏漏,希望能及時(shí)反饋給我們,以便及時(shí)更正。聯(lián)系我們請(qǐng)發(fā)郵件。 最后祝各位讀者讀書快樂,學(xué)習(xí)進(jìn)步! 編者 劉新,計(jì)算機(jī)軟件與理論專業(yè)碩士,現(xiàn)為湘潭大學(xué)信息工程學(xué)院教師,副教授。從事計(jì)算機(jī)專業(yè)教學(xué)11年。主要講授《Java程序設(shè)計(jì)語言》、《Java應(yīng)用技術(shù)》、《C語言程序設(shè)計(jì)》、《數(shù)據(jù)結(jié)構(gòu)》、《算法設(shè)計(jì)與分析》等專業(yè)課程。先后參與過10多個(gè)系統(tǒng)的開發(fā)工作,其中包括解放軍報(bào)全文檢索系統(tǒng)、新聞出版報(bào)全文檢索系統(tǒng)、警務(wù)管理系統(tǒng)、MARC數(shù)據(jù)編輯軟件、MARC數(shù)據(jù)到XML數(shù)據(jù)轉(zhuǎn)換系統(tǒng)、Z39。50客戶端瀏覽軟件、路橋收費(fèi)及稽查系統(tǒng)等。尤其擅長Java開發(fā)。
第1篇 Java基礎(chǔ)知識(shí)入門 4.1.1 繼承的基本原理 4.1.2 Java繼承的特征 4.1.3 Java中子類繼承父類的描述及實(shí)現(xiàn) 4.1.4 Java繼承的內(nèi)存形態(tài) 4.2 繼承中屬性隱藏與方法覆蓋 4.2.1 屬性的隱藏 4.2.2 方法的覆蓋 4.3 構(gòu)造方法的繼承與調(diào)用 4.3.1 構(gòu)造方法的繼承 4.3.2 super關(guān)鍵字的使用 4.3.3 關(guān)于子類繼承父類的總結(jié) 4.4 多態(tài)技術(shù) 4.4.1 Java中的多態(tài) 4.4.2 重載與覆蓋 4.4.3 運(yùn)行時(shí)多態(tài) 4.5 接口與多重繼承 4.5.1 接口的定義 4.5.2 接口的繼承 4.5.3 接口的實(shí)現(xiàn) 4.6 Java抽象類與最終類 4.6.1 抽象類與抽象方法 4.6.2 最終類與最終方法 4.7 Java內(nèi)部類 4.7.1 內(nèi)部類的定義 4.7.2 內(nèi)部類訪問外部類的成員 4.7.3 內(nèi)部類之間的相互使用 4.7.4 在外部使用內(nèi)部類 4.7.5 匿名內(nèi)部類 4.7.6 內(nèi)部類的作用 4.8 Java包:庫單元 4.8.1 包的創(chuàng)建 4.8.2 包的使用 4.8.3 JAR文件的創(chuàng)建和使用 4.8.4 JDK中的常用包 4.9 本章小結(jié) 4.10 實(shí)戰(zhàn)習(xí)題 第3篇 Java數(shù)據(jù)處理 第5章 數(shù)組與字符串( 教學(xué)視頻:69分鐘) 5.1 數(shù)組 5.1.1 一維數(shù)組的聲明 5.1.2 一維數(shù)組的創(chuàng)建 5.1.3 一維數(shù)組的使用 5.1.4 二維數(shù)組的聲明 5.1.5 二維數(shù)組的創(chuàng)建 5.1.6 二維數(shù)組的使用 5.1.7 程序示例1——數(shù)組排序 5.1.8 程序示例2——楊輝三角 5.2 字符串 5.2.1 String對(duì)象的聲明 5.2.2 String對(duì)象的創(chuàng)建 5.2.3 String對(duì)象的使用 5.2.4 String類型的數(shù)組 5.2.5 StringBuffer對(duì)象的聲明 5.2.6 StringBuffer對(duì)象的創(chuàng)建 5.2.7 StringBuffer對(duì)象的使用 5.3 本章小結(jié) 5.4 實(shí)戰(zhàn)習(xí)題 第6章 Java的異常處理( 教學(xué)視頻:58分鐘) 6.1 異常與異常處理 6.1.1 異常的特點(diǎn) 6.1.2 異常處理的兩種模型 6.1.3 異常處理在編程中的優(yōu)點(diǎn) 6.2 Java的異常處理 6.2.1 Java的異常處理機(jī)制 6.2.2 Java異常類的層次結(jié)構(gòu) 6.2.3 Java異常的分類 6.2.4 Java異常處理的原則 6.3 Java異常處理實(shí)踐 6.3.1 Java異常捕獲與處理 6.3.2 異常的拋出 6.3.3 異常的嵌套處理 6.3.4 自定義異常及其處理方法 6.3.5 Java異常處理的應(yīng)用示例 6.4 本章小結(jié) 6.5 實(shí)戰(zhàn)習(xí) 第7章 Java輸入輸出處理技術(shù)( 教學(xué)視頻:110分鐘) 第4篇 Java中的高級(jí)技術(shù) 第8章 Java的多線程機(jī)制( 教學(xué)視頻:83分鐘) 第9章 運(yùn)行時(shí)類型識(shí)別( 教學(xué)視頻:37分鐘) 第10章 泛型( 教學(xué)視頻:18分鐘) 第11章 Java集合框架( 教學(xué)視頻:20分鐘) 第12章 類型包裝器、自動(dòng)裝箱和元數(shù)據(jù)( 教學(xué)視頻:21分鐘) 第13章 常用工具類( 教學(xué)視頻:74分鐘) 第5篇 桌面程序開發(fā) 第14章 GUI程序設(shè)計(jì)( 教學(xué)視頻:29分鐘) 第15章 Java多媒體編程應(yīng)用( 教學(xué)視頻:16分鐘) 第6篇 數(shù)據(jù)庫程序設(shè)計(jì) 第16章 數(shù)據(jù)庫基礎(chǔ)( 教學(xué)視頻:47分鐘) 第17章 Java數(shù)據(jù)庫編程技術(shù)( 教學(xué)視頻:110分鐘) 第7篇 Java網(wǎng)絡(luò)程序開發(fā) 第18章 Java網(wǎng)絡(luò)編程技術(shù)( 教學(xué)視頻:78分鐘) 第19章 JSP程序設(shè)計(jì)( 教學(xué)視頻:42分鐘) *第8篇 即時(shí)通信系統(tǒng)開發(fā)項(xiàng)目實(shí)戰(zhàn) 第20章 系統(tǒng)分析和設(shè)計(jì)( 教學(xué)視頻:27分鐘) 第21章 服務(wù)器端功能模塊的實(shí)現(xiàn)( 教學(xué)視頻:19分鐘) 第22章 客戶端功能模塊的實(shí)現(xiàn)( 教學(xué)視頻:25分鐘) 說明:因篇幅所限,第8篇內(nèi)容以PDF電子文檔的格式收錄于本書的配書光盤中贈(zèng)送給讀者,讀者可以選擇閱讀。該項(xiàng)目案例涉及的源程序及視頻講解也收錄于配書光盤中。
第3 章 對(duì) 象 和 類
在當(dāng)今的計(jì)算機(jī)大型應(yīng)用軟件開發(fā)領(lǐng)域,面向?qū)ο蠹夹g(shù)正在逐步取代面向過程的程序設(shè)計(jì)技術(shù)。本章將介紹面向?qū)ο蟮幕局R(shí)和Java 實(shí)現(xiàn)面向?qū)ο蟪绦蛟O(shè)計(jì)的主要工具——類。如果讀者缺乏關(guān)于面向?qū)ο蟪绦蛟O(shè)計(jì)的背景,一定要仔細(xì)閱讀本章。如果讀者有C++編程經(jīng)驗(yàn),也要注意二者之間的區(qū)別,畢竟Java 在類的具體實(shí)現(xiàn)上與C++有較大的差別。學(xué)習(xí)本章面向?qū)ο蟮南嚓P(guān)知識(shí),主要內(nèi)容有以下幾點(diǎn): 面向?qū)ο蟮幕靖拍睿?/span> 對(duì)象與類的理解; 成員變量的定義與使用; 方法的定義及實(shí)現(xiàn); 方法調(diào)用; 構(gòu)造方法與靜態(tài)方法; 終結(jié)處理與垃圾回收。 3.1 什么是面向?qū)ο?/span> 面向?qū)ο螅∣bject Oriented,OO)是當(dāng)前計(jì)算機(jī)界關(guān)心的重點(diǎn),它是20 世紀(jì)90 年代軟件開發(fā)方法的主流。面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計(jì)和軟件開發(fā),擴(kuò)展到很廣的范圍。例如,數(shù)據(jù)庫系統(tǒng)、交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺(tái)、分布式系統(tǒng)、網(wǎng)絡(luò)管理結(jié)構(gòu)、CAD 技術(shù)和人工智能等領(lǐng)域。面向?qū)ο笫且环N對(duì)現(xiàn)實(shí)世界理解和抽象的方法,是計(jì)算機(jī)編程技術(shù)發(fā)展到一定階段后的產(chǎn)物,它是相對(duì)于面向過程而言的。通過面向?qū)ο蟮姆绞剑瑢F(xiàn)實(shí)世界的物抽象成對(duì)象,現(xiàn)實(shí)世界中的關(guān)系抽象成類、繼承等,以更直觀、清晰地完成對(duì)現(xiàn)實(shí)世界的抽象與數(shù)字建模。討論面向?qū)ο蠓矫娴奈恼路浅6唷5,明確地給出“面向?qū)ο蟆钡亩x卻非常少。 最初,“面向?qū)ο蟆笔菍V冈诔绦蛟O(shè)計(jì)中采用封裝、繼承和抽象等設(shè)計(jì)方法。可是,這個(gè)定義顯然不能再適合現(xiàn)在的情況。面向?qū)ο蟮乃枷胍呀?jīng)涉及到軟件開發(fā)的各個(gè)方面。例如,面向?qū)ο蟮姆治觯∣bject Oriented Analysis,OOA)、面向?qū)ο蟮脑O(shè)計(jì)(Object Oriented Design,OOD)以及經(jīng)常說的面向?qū)ο蟮木幊蹋∣bject Oriented Programming,OOP)。許多有關(guān)面向?qū)ο蟮奈恼拢贾皇侵v述在面向?qū)ο蟮拈_發(fā)中所需要注意的問題,或所采用的比較好的設(shè)計(jì)方法。看這些文章只有真正懂得什么是對(duì)象,什么是面向?qū)ο螅拍茏畲蟪潭鹊厥斋@知識(shí)。 ?說明:在本章中,著重討論OOP,有關(guān)OOA 和OOD 請(qǐng)讀者查閱有關(guān)軟件工程的書籍。OOP 從所處理的數(shù)據(jù)入手,以數(shù)據(jù)為中心而不是以服務(wù)(功能)為中心來描述系統(tǒng)。它把編程問題視為一個(gè)數(shù)據(jù)集合,因?yàn)閿?shù)據(jù)相對(duì)于功能而言,具有更強(qiáng)的穩(wěn)定性。OOP 同結(jié)構(gòu)化程序設(shè)計(jì)相比最大的區(qū)別就在于:前者首先關(guān)心的是所要處理的數(shù)據(jù),而后者首先關(guān)心的是功能。在計(jì)算機(jī)編程中使用OOP 方法,更利于從人理解的方式對(duì)于復(fù)雜系統(tǒng)的進(jìn)行分析、設(shè)計(jì)與編程。同時(shí)能有效提高編程的效率,通過封裝技術(shù),消息機(jī)制可以像搭積木的一樣快速開發(fā)出一個(gè)全新的系統(tǒng)。 3.1.1 對(duì)象的理解 OOP 是一種圍繞真實(shí)世界的概念來組織模型的程序設(shè)計(jì)方法,它采用對(duì)象來描述問題空間的實(shí)體?梢哉f,“對(duì)象”這個(gè)概念是OOP 最本質(zhì)的概念之一,在面向?qū)ο蟮木幊踢^程中,首先根據(jù)客戶需求抽象出業(yè)務(wù)對(duì)象;然后對(duì)需求進(jìn)行合理分層,構(gòu)建相對(duì)獨(dú)立的業(yè)務(wù)模塊;之后設(shè)計(jì)業(yè)務(wù)邏輯,利用多態(tài)、繼承、封裝和抽象的編程思想,實(shí)現(xiàn)業(yè)務(wù)需求;最后通過整合各模塊,達(dá)到高內(nèi)聚、低耦合的效果,從而滿足客戶要求。但是,如何給“對(duì)象”下一個(gè)嚴(yán)謹(jǐn)?shù)亩x,卻是一個(gè)棘手的問題,目前還沒有統(tǒng)一的認(rèn)識(shí)。 在現(xiàn)實(shí)生活中,一般認(rèn)為對(duì)象是行動(dòng)或思考時(shí)作為目標(biāo)的各種事物。對(duì)象所代表的本體可能是一個(gè)物理存在,也可能是一個(gè)概念存在。例如一枝花、一個(gè)人、一項(xiàng)計(jì)劃等。在使用計(jì)算機(jī)解決問題時(shí),對(duì)象是作為計(jì)算機(jī)模擬真實(shí)世界的一個(gè)抽象,一個(gè)對(duì)象就是一個(gè)物理實(shí)體或邏輯實(shí)體,它反映了系統(tǒng)為之保存信息和(或)與它交互的能力。 在計(jì)算機(jī)程序中,對(duì)象相當(dāng)于一個(gè)“基本程序模塊”,它包含了屬性(數(shù)據(jù))和加在這些數(shù)據(jù)上的操作(行為)。對(duì)象的屬性是描述對(duì)象的數(shù)據(jù),屬性值的集合稱為對(duì)象的狀態(tài)。對(duì)象的行為則會(huì)修改這些數(shù)據(jù)值并改變對(duì)象的狀態(tài)。因此,在程序設(shè)計(jì)領(lǐng)域,可以用“對(duì)象=數(shù)據(jù)+作用于這些數(shù)據(jù)上的操作”這一公式來表達(dá)。 下面以一個(gè)生活中常見的例子來說明對(duì)象這個(gè)概念。例如“椅子”這個(gè)對(duì)象,它是“家具”這個(gè)更大的一類對(duì)象的一個(gè)成員。椅子應(yīng)該具有家具所具有的一些共性,如:價(jià)格、重量和所有者等屬性。它們的值也說明了椅子這個(gè)對(duì)象的狀態(tài)。例如,價(jià)格為100 元,重量為5 公斤,所有者是小王等。類似地,家具中的桌子、沙發(fā)等對(duì)象也具有這些屬性。這些對(duì)象所包含的成分可以用圖3.1 來說明。 對(duì)象的操作是對(duì)對(duì)象屬性的修改。在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,對(duì)象屬性的修改只能通過對(duì)象的操作來進(jìn)行,這種操作又稱為方法。比如上面的對(duì)象都有“所有者”這一個(gè)屬性,修改該屬性的方法可能是“賣出”,一旦執(zhí)行了“賣出”操作,“所有者”這個(gè)屬性就會(huì)發(fā)生變化,對(duì)象的狀態(tài)也就發(fā)生了改變,F(xiàn)在的問題是,所有的對(duì)象都有可能執(zhí)行“賣出”操作,那么如何具體區(qū)分賣出了哪個(gè)對(duì)象,這是需要考慮的。面向?qū)ο蟮脑O(shè)計(jì)思路把“賣出”這個(gè)操作包含在對(duì)象里面,執(zhí)行“賣出”操作,只對(duì)包含了該操作的對(duì)象有效。因此,整個(gè)對(duì)象就會(huì)變成圖3.2 這個(gè)樣子。 由于對(duì)象椅子已經(jīng)包含了“賣出”操作,因此,當(dāng)執(zhí)行“賣出”操作時(shí),對(duì)象外部的使用者并不需要關(guān)心它的實(shí)現(xiàn)細(xì)節(jié),只需要知道如何來調(diào)用該操作,以及會(huì)獲得怎樣的結(jié)果就可以了,甚至不需要知道它到底修改了哪個(gè)屬性值。這樣做不僅實(shí)現(xiàn)了模塊化和信息隱藏,有利于程序的可移植性和安全性,也有利于對(duì)復(fù)雜對(duì)象的管理。圖3.1 對(duì)象的屬性集合 圖3.2 封裝了屬性和操作的對(duì)象 3.1.2 什么是類 “物以類聚”是人們區(qū)分、歸納客觀事物的方法。在面向?qū)ο笙到y(tǒng)中,人們不需要逐個(gè)去描述各個(gè)具體的對(duì)象,而是關(guān)注具有同類特性的一類對(duì)象,抽象出這樣一類對(duì)象共有的結(jié)構(gòu)和行為,進(jìn)行一般性描述,這就引出了類的概念。椅子、桌子、沙發(fā)等對(duì)象都具有一些相同的特征,由于這些相同的特征,它們可以歸為一類,稱為家具。因此,家具就是一個(gè)類,它的每個(gè)對(duì)象都有價(jià)格、重量及所有者這些屬性。也可以將家具看成是產(chǎn)生椅子、桌子、沙發(fā)等對(duì)象的一個(gè)模板。椅子、桌子、沙發(fā)等對(duì)象的屬性和行為都是由家具類所決定的。家具和椅子之間的關(guān)系就是類與類的成員對(duì)象之間的關(guān)系。類是具有共同屬性、共同操作的對(duì)象的集合。而單個(gè)的對(duì)象則是所屬類的一個(gè)成員,或稱為實(shí)例(instance)。在描述一個(gè)類時(shí),定義了一組屬性和操作,而這些屬性和操作可被該類所有的成員所繼承,如圖3.3 所示。 圖3.3 由類到對(duì)象的繼承 圖3.3 表明,對(duì)象會(huì)自動(dòng)擁有它所屬類的全部屬性和操作。正因?yàn)檫@一點(diǎn),人們才會(huì)知道一種物品是家具時(shí),主動(dòng)去詢問它的價(jià)格、尺寸和材質(zhì)等屬性。對(duì)于初學(xué)者而言,類和對(duì)象的概念最容易混淆。類屬于類型的范疇,用于描述對(duì)象的特性。對(duì)象屬于值的范疇,是類的實(shí)例。從集合的角度看,類是對(duì)象的集合,它們是從屬關(guān)系。也可以將類看成是一個(gè)抽象的概念,而對(duì)象是一個(gè)具體的概念。例如蘋果是一個(gè)類,而“桌子上的那個(gè)蘋果”則是一個(gè)對(duì)象。從編程的角度看,類和對(duì)象的關(guān)系可以看成是數(shù)據(jù)類型和變量的關(guān)系。還可以認(rèn)為類是一個(gè)靜態(tài)的概念,而對(duì)象是一個(gè)動(dòng)態(tài)的概念,它具有生命力。類和對(duì)象的關(guān)系可以用如圖3.4 所示這個(gè)實(shí)例來演示,如圖3.4 所示。 圖3.4 類與對(duì)象的關(guān)系 3.1.3 消息的定義 由上述內(nèi)容可知,對(duì)象的行為是通過其定義的一組方法來描述,對(duì)象的結(jié)構(gòu)特征是由它的屬性來表現(xiàn)。但是,對(duì)象不會(huì)無緣無故地執(zhí)行某個(gè)操作,只有在接受了其他對(duì)象的請(qǐng)求之后,才會(huì)進(jìn)行某一操作,這種請(qǐng)求對(duì)象執(zhí)行某一操作,或是回答某些信息的要求稱為消息。對(duì)象之間通過消息的傳遞來實(shí)現(xiàn)相互作用。消息一般有3 個(gè)組成部分:消息接收者(接收對(duì)象名)、接收對(duì)象應(yīng)采用的方法以及方法所需要的參數(shù)。同時(shí),接收消息的對(duì)象在執(zhí)行完相應(yīng)的方法后,可能會(huì)給發(fā)送者返回一些信息。 例如,教師向?qū)W生布置作業(yè)“07 級(jí)計(jì)算機(jī)1 班做5 道習(xí)題”。其中,教師和學(xué)生都是對(duì)象,“07 級(jí)計(jì)算機(jī)1 班”是消息的接收者,“做習(xí)題”是要求目標(biāo)對(duì)象——學(xué)生執(zhí)行的方法,“5 道”是要求對(duì)象執(zhí)行方法時(shí)所需要的參數(shù)。學(xué)生也可以向教師返回作業(yè)信息。這樣,對(duì)象之間通過消息機(jī)制,建立起了相互關(guān)系。由于任何一個(gè)對(duì)象的所有行為都可以用方法來描述,所以通過消息機(jī)制可以完全實(shí)現(xiàn)對(duì)象之間的交互。在Java 程序設(shè)計(jì)中,所需完成的功能任務(wù)就在對(duì)象之間的消息傳遞與相互作用之間完成。 3.1.4 面向?qū)ο蟮幕咎卣?/span> 在上述面向?qū)ο蟮幕靖拍罨A(chǔ)之上,不可避免地要涉及到面向?qū)ο蟪绦蛟O(shè)計(jì)所具有的4 個(gè)共同特征:抽象性、封裝性、繼承性和多態(tài)性。 1.抽象 抽象是人們認(rèn)識(shí)事物的常用方法,比如地圖的繪制。抽象的過程就是如何簡(jiǎn)化、概括所觀察到的現(xiàn)實(shí)世界,并為人們所用的過程。抽象是軟件開發(fā)的基礎(chǔ)。軟件開發(fā)離不開現(xiàn)實(shí)環(huán)境,但需要對(duì)信息細(xì)節(jié)進(jìn)行提煉、抽象,找到事物的本質(zhì)和重要屬性。抽象包括兩個(gè)方面:過程抽象和數(shù)據(jù)抽象。過程抽象把一個(gè)系統(tǒng)按功能劃分成若干個(gè)子系統(tǒng),進(jìn)行“自頂向下逐步求精”的程序設(shè)計(jì)。數(shù)據(jù)抽象以數(shù)據(jù)為中心,把數(shù)據(jù)類型和施加在該類型對(duì)象上的操作作為一個(gè)整體(對(duì)象)來進(jìn)行描述,形成抽象數(shù)據(jù)類型ADT。所有編程語言的最終目的都是提供一種“抽象”方法。一種較有爭(zhēng)議的說法是:解決問題的復(fù)雜程度直接取決于抽象的種類及質(zhì)量。其中,“種類”是指準(zhǔn)備對(duì)什么進(jìn)行“抽象”。匯編語言是對(duì)基礎(chǔ)機(jī)器的少量抽象。后來的許多“命令式”語言(如FORTRAN、BASIC 和C)是對(duì)匯編語言的一種抽象。與匯編語言相比,這些語言已有了較大的進(jìn)步,但它們的抽象原理依然要求程序設(shè)計(jì)者著重考慮計(jì)算機(jī)的結(jié)構(gòu),而非考慮問題本身的結(jié)構(gòu)。 在機(jī)器模型(位于“方案空間”)與實(shí)際解決的問題模型(位于“問題空間”)之間,程序員必須建立起一種聯(lián)系。這個(gè)過程要求人們付出較大的精力,而且由于它脫離了編程語言本身的范圍,造成程序代碼很難編寫,而且要花較大的代價(jià)進(jìn)行維護(hù)。由此造成的副作用便是一門完善的“編程方法”學(xué)科。 為機(jī)器建模的另一個(gè)方法是為要解決的問題制作模型。對(duì)一些早期語言來說,如LISP和APL,它們的做法是“從不同的角度觀察世界”、“所有問題都?xì)w納為列表”或“所有問題都?xì)w納為算法”。PROLOG 則將所有問題都?xì)w納為決策鏈。對(duì)于這些語言,可以認(rèn)為它們一部分是面向基于“強(qiáng)制”的編程,另一部分則是專為處理圖形符號(hào)設(shè)計(jì)的。每種方法都有自己特殊的用途,適合解決某一類的問題。但只要超出了它們力所能及的范圍,就會(huì)顯得非常笨拙。 面向?qū)ο蟮某绦蛟O(shè)計(jì)在此基礎(chǔ)上則跨出了一大步,程序員可利用一些工具來表達(dá)問題空間內(nèi)的元素。由于這種表達(dá)非常普遍,所以不必受限于特定類型的問題。人們將問題空間中的元素以及它們?cè)诜桨缚臻g的表示物稱作“對(duì)象”。當(dāng)然,還有一些在問題空間沒有對(duì)應(yīng)體的其他對(duì)象。通過添加新的對(duì)象類型,程序可進(jìn)行靈活的調(diào)整,以便與特定的問題配合。所以在閱讀方案的描述代碼時(shí),會(huì)讀到對(duì)問題進(jìn)行表達(dá)的話語。與以前的方法相比,這無疑是一種更加靈活、更加強(qiáng)大的語言抽象方法。 總之,OOP 允許人們根據(jù)問題,而不是根據(jù)方案來描述問題。然而,仍有一個(gè)聯(lián)系途徑回到計(jì)算機(jī)。每個(gè)對(duì)象都類似一臺(tái)小計(jì)算機(jī);它們有自己的狀態(tài),而且可要求它們進(jìn)行特定的操作。與現(xiàn)實(shí)世界的“對(duì)象”或者“物體”相比,編程“對(duì)象”與它們也存在共通的地方:它們都有自己的特征和行為。 2.封裝 封裝是面向?qū)ο缶幊痰奶卣髦,也是類和?duì)象的主要特征。封裝將數(shù)據(jù)以及加在這些數(shù)據(jù)上的操作組織在一起,成為有獨(dú)立意義的構(gòu)件。外部無法直接訪問這些封裝了的數(shù)據(jù),從而保證了這些數(shù)據(jù)的正確性。如果這些數(shù)據(jù)發(fā)生了差錯(cuò),也很容易定位錯(cuò)誤是由哪個(gè)操作引起的。 如果外部需要訪問類里面的數(shù)據(jù),就必須通過接口(Interface)進(jìn)行訪問。接口規(guī)定了可對(duì)一個(gè)特定的對(duì)象發(fā)出哪些請(qǐng)求。當(dāng)然,必須在某個(gè)地方存在著一些代碼,以便滿足這些請(qǐng)求。這些代碼與那些隱藏起來的數(shù)據(jù)叫做“隱藏的實(shí)現(xiàn)”。站在過程化程序編寫(Procedural Programming)的角度,整個(gè)問題并不顯得復(fù)雜。一種類型含有與每種可能的請(qǐng)求關(guān)聯(lián)起來的函數(shù)。一旦向?qū)ο蟀l(fā)出一個(gè)特定的請(qǐng)求,就會(huì)調(diào)用那個(gè)函數(shù)。通常將這個(gè)過程總結(jié)為向?qū)ο蟆鞍l(fā)送一條消息”(提出一個(gè)請(qǐng)求)。對(duì)象的職責(zé)就是決定如何對(duì)這條消息作出反應(yīng)(執(zhí)行相應(yīng)的代碼)。 若任何人都能使用一個(gè)類的所有成員,那么可對(duì)這個(gè)類做任何事情,則沒有辦法強(qiáng)制他們遵守任何約束——所有東西都會(huì)暴露無遺。有兩方面的原因促使了類的編制者控制對(duì)成員的訪問。第一個(gè)原因是防止程序員接觸他們不該接觸的東西——通常是內(nèi)部數(shù)據(jù)類型的設(shè)計(jì)思想。若只是為了解決特定的問題,用戶只需操作接口即可,無需明白這些信息。類向用戶提供的實(shí)際是一種服務(wù),因?yàn)樗麄兒苋菀拙涂煽闯瞿男⿲?duì)自己非常重要,以及哪些可忽略不計(jì)。進(jìn)行訪問控制的第二個(gè)原因是允許庫設(shè)計(jì)人員修改內(nèi)部結(jié)構(gòu),不用擔(dān)心它會(huì)對(duì)客戶程序員造成什么影響。例如,編制 者最開始可能設(shè)計(jì)了一個(gè)形式簡(jiǎn)單的類,以便簡(jiǎn)化開發(fā)。后來又決定進(jìn)行改寫,使其更快地運(yùn)行。若接口與實(shí)現(xiàn)方法早已隔離開,并分別受到保護(hù),就可放心做到這一點(diǎn),只要求用戶重新鏈接一下即可。封裝考慮的是內(nèi)部實(shí)現(xiàn),抽象考慮的是外部行為。符合模塊化的原則,使得軟件的可維護(hù)性、擴(kuò)充性大為改觀。 3.繼承 繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法。對(duì)象的一個(gè)新類可以從現(xiàn)有的類中派生,這個(gè)過程稱為類的繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實(shí)例變量,并且派生類可以修改或增加新的方法使之更適合特殊的需求。這也體現(xiàn)了大自然中一般與特殊的關(guān)系。繼承性很好地解決了軟件的可重用性問題。比如說,所有的Windows 應(yīng)用程序都有一個(gè)窗口,它們可以看作都是從一個(gè)窗口類派生出來的。但是有的應(yīng)用程序用于文字處理,有的應(yīng)用程序用于繪圖,這是由于派生出了不同的子類,各個(gè)子類添加了不同的特性。關(guān)于繼承的詳細(xì)討論,將在本書4.1~4.2 節(jié)進(jìn)行。 4.多態(tài) 多態(tài)也叫多態(tài)性,是指允許不同類的對(duì)象對(duì)同一消息作出響應(yīng)。比如同樣的加法,把兩個(gè)時(shí)間加在一起和把兩個(gè)整數(shù)加在一起肯定完全不同。又比如,同樣的選擇“編輯”和“粘貼”操作,在字處理程序和繪圖程序中有不同的效果。多態(tài)性包括參數(shù)化多態(tài)性和運(yùn)行時(shí)多態(tài)性。多態(tài)性語言具有靈活、抽象、行為共享和代碼共享的優(yōu)勢(shì),很好地解決了應(yīng)用程序函數(shù)同名問題。關(guān)于多態(tài)性的討論,將在4.4 節(jié)進(jìn)行。最后,以Alan Kay 的話作為本節(jié)的結(jié)束語。他總結(jié)了Smalltalk(這是第一種成功的面向?qū)ο蟪绦蛟O(shè)計(jì)語言,也是Java 的基礎(chǔ)語言)的5 大基本特征。通過這些特征,讀者可以理解“純粹”的面向?qū)ο蟪绦蛟O(shè)計(jì)方法。 。1)所有東西都是對(duì)象?蓪(duì)象想象成一種新型變量,它保存著數(shù)據(jù),但可要求它對(duì)自身進(jìn)行操作。理論上講,可從要解決的問題上,提出所有概念性的組件,然后在程序中將其表達(dá)為一個(gè)對(duì)象。 。2)程序是一大堆對(duì)象的組合。通過消息傳遞,各對(duì)象知道自己該做些什么。為了向?qū)ο蟀l(fā)出請(qǐng)求,需向那個(gè)對(duì)象“發(fā)送一條消息”。更具體地講,可將消息想象為一個(gè)調(diào)用請(qǐng)求,它調(diào)用的是從屬于目標(biāo)對(duì)象的一個(gè)子例程或函數(shù)。 (3)每個(gè)對(duì)象都有自己的存儲(chǔ)空間,可容納其他對(duì)象;蛘哒f,通過封裝現(xiàn)有對(duì)象,可制作出新型對(duì)象。所以,盡管對(duì)象的概念非常簡(jiǎn)單,但在程序中卻可達(dá)到任意高的復(fù)雜程度。 (4)每個(gè)對(duì)象都有一種類型。根據(jù)語法,每個(gè)對(duì)象都是某個(gè)“類(Class)”的一個(gè)“實(shí)例”。其中,“類”是“類型(Type)”的同義詞。一個(gè)類最重要的特征就是“能將什么消息發(fā)給它?”。 (5)同一類所有對(duì)象都能接收相同的消息。這實(shí)際是別有含義的一種說法,讀者不久便能理解。例如,由于類型為“圓(Circle)”的一個(gè)對(duì)象也屬于類型為“形狀(Shape)”的一個(gè)對(duì)象,所以一個(gè)“圓”完全能接收“形狀”的消息。這意味著可讓程序代碼統(tǒng)一指揮“形狀”,令其自動(dòng)控制所有符合“形狀”描述的對(duì)象,其中自然包括“圓”。這一特性稱為對(duì)象的“可替換性”,是OOP 最重要的概念之一。 ……
你還可能感興趣
我要評(píng)論
|