Java是近年來十分流行的程序設計語言,還是一門通用的網絡編程語言,在Internet上有著廣泛的應用。本書全面介紹了Java語言的功能和特點,主要內容包括: Java語言基礎知識、Java語法構成、面向對象編程技術、常用系統類的使用、圖形用戶界面設計、圖形與多媒體處理、異常處理、多線程技術和訪問數據庫技術等內容。
本書以通俗易懂的語言介紹了大量的實例,從實用的角度解釋了Java面向對象編程思想,介紹了Java 編程技巧。
本書不僅適合沒有編程經驗的讀者學習,也適合有一定程序語言基礎的讀者自學,還可作為高等院校或計算機培訓班學生的教材。
1)通俗易懂、圖文并茂。本書都是通過具體的例子來介紹有關Java語言的概念、方法和技術,每章都有大量完整的例子,用來說明使用Java語言編程的基本步驟和基本方法,并有圖片配合說明,通俗易懂,讀者完全可以按書中介紹的方法完成每個例子,通過實例理解Java語言的基本思想和編程技巧。
2)內容全面、結構清晰。本書從Java語言的產生、特點、結構開始介紹,然后介紹如何得到Java語言的開發工具、如何設置Java的開發環境、編寫Java程序,再系統介紹Java語言的基本語法和面向對象的編程技術、異常處理機制、圖形用戶界面、多線程機制、圖形、圖像與多媒體技術、訪問數據庫技術。
3)實踐性強。在使用本書學習時,可結合具體的實例,上級實踐,按照書中介紹的例子,在短時間內使用Java語言進行程序設計。
《高等院校計算機應用技術規劃教材》
主任譚浩強
副主任焦金生陳明丁桂芝
委員(按姓氏筆畫排序)
王智廣孔令德劉星劉蔭銘
安志遠安淑芝孫慧李文英
李葉紫李琳李雁翎宋紅
陳強邵麗萍尚曉航張玲
侯冬梅郝玲趙豐年秦建中
莫治雄袁玫訾秀玲薛淑斌
謝樹煜謝琛
《高等院校計算機應用技術規劃教材》
進入21世紀,計算機成為人類常用的現代工具,每一個有文化的人都應當了解計算機,學會使用計算機來處理各種事務。
學習計算機知識有兩種不同的方法:一種是側重理論知識的學習,從原理入手,注重理論和概念;另一種是側重于應用的學習,從實際入手,注重掌握其應用的方法和技能。不同的人應根據其具體情況選擇不同的學習方法。對多數人來說,計算機是作為一種工具來使用的,應當以應用為目的、以應用為出發點。對于應用型人才來說,顯然應當采用后一種學習方法,根據當前和今后的需要,選擇學習的內容,圍繞應用進行學習。
學習計算機應用知識,并不排斥學習必要的基礎理論知識,要處理好這兩者的關系。在學習過程中,有兩種不同的學習模式:一種是金字塔模型,亦稱為建筑模型,強調基礎寬厚,先系統學習理論知識,打好基礎以后再聯系實際應用;另一種是生物模型,植物并不是先長好樹根再長樹干,長好樹干才長樹冠,而是樹根、樹干和樹冠同步生長的。對計算機應用型人才教育來說,應該采用生物模型,隨著應用的發展,不斷學習和擴展有關的理論知識,而不是孤立地、無目的地學習理論知識。
傳統的理論課程采用以下的三部曲:提出概念—解釋概念—舉例說明,這適合前面第一種側重知識的學習方法。對于側重應用的學習者,我們提倡新的三部曲:提出問題—解決問題—歸納分析。傳統的方法是:先理論后實際,先抽象后具體,先一般后個別。我們采用的方法是:從實際到理論,從具體到抽象,從個別到一般,從零散到系統。實踐證明這種方法是行之有效的,減少了初學者在學習上的困難。這種教學方法更適合于應用型人才。
檢查學習好壞的標準,不是“知道不知道”,而是“會用不會用”,學習的目的主要在于應用。因此希望讀者一定要重視實踐環節,多上機練習,千萬不要滿足于“上課能聽懂、教材能看懂”。有些問題,別人講半天也不明白,自己一上機就清楚了。教材中有些實踐性比較強的內容,不一定在課堂上由老師講授,而可以指定學生通過上機掌握這些內容。這樣做可以培養學生的自學能力,啟發學生的求知欲望。
全國高等院校計算機基礎教育研究會歷來倡導計算機基礎教育必須堅持面向應用的正確方向,要求構建以應用為中心的課程體系,大力推廣新的教學三部曲,這是十分重要的指導思想,這些思想在“中國高等院校計算機基礎課程”中做了充分的說明。本叢書完全符合并積極貫徹全國高等院校計算機基礎教育研究會的指導思想,按照“中國高等院校計算機基礎教育課程體系”組織編寫。
這套“高等院校計算機應用技術規劃教材”是根據廣大應用型本科和高職高專院校的迫切需要而精心組織的,其中包括4個系列:
(1) 基礎教材系列。該系列主要涵蓋了計算機公共基礎課程的教材。
(2) 應用型教材系列。適合作為培養應用型人才的本科院校和基礎較好、要求較高的高職高專學校的主干教材。
(3) 實用技術教材系列。針對應用型院校和高職高專院校所需要掌握的技能技術編寫的教材。
(4) 實訓教材系列。應用型本科院校和高職高專院校都可以選用這類實訓教材。其特點是側重實踐環節,通過實踐(而不是通過理論講授)去獲取知識,掌握應用。這是教學改革的一個重要方面。
本套教材是從1999年開始出版的,根據教學的需要和讀者的意見,幾年來多次修改完善,選題不斷擴展,內容日益豐富,先后出版了60多種教材和參考書,范圍包括計算機專業和非計算機專業的教材和參考書;必修課教材、選修課教材和自學參考的教材。不同專業可以從中選擇所需要的部分。
為了保證教材的質量,我們遴選了有豐富教學經驗的高校優秀教師分別作為本叢書各教材的作者,這些老師長期從事計算機的教學工作,對應用型的教學特點有較多的研究和實踐經驗。由于指導思想明確,作者水平較高,教材針對性強,質量較高,本叢書問世7年來,愈來愈得到各校師生的歡迎和好評,至今已發行了240多萬冊,是國內應用型高校的主流教材之一。2006年被教育部評為普通高等教育“十一五”國家級規劃教材,向全國推薦。
由于我國的計算機應用技術教育正在蓬勃發展,許多問題有待深入討論,新的經驗也會層出不窮,我們會根據需要不斷豐富本叢書的內容,擴充叢書的選題,以滿足各校教學的需要。
本叢書肯定會有不足之處,請專家和讀者不吝指正。
全國高等院校計算機基礎教育研究會會長
《高等院校計算機應用技術規劃教材》主編譚浩強2008年5月1日于北京清華園
Java是目前推廣速度最快的程序設計語言之一,它采用面向對象的編程技術,功能強大而又簡單易學,深受廣大程序設計人員的偏愛。Java伴隨著Internet問世,隨著Internet的發展而成熟。Java是精心設計的語言,它具有簡單性、面向對象性、平臺無關性、安全性和健壯性等諸多特點,內置了多線程和網絡支持能力,可以說它是網絡世界的通用語言。為了迎接信息時代的挑戰,學習和掌握Java語言無疑會帶來更多的機遇。
本書具有簡單易學、理論和實例結合的特點,可以使讀者很容易地接受Java語言的概念和設計方法,很快地編寫出合格的面向對象程序來解決一些簡單的實際問題。一些抽象的很難理解的內容,如類、對象、繼承、多態、異常、多線程等,在本書中都通過通俗易懂的方式進行了簡化。使用本書學習,讀者將會發現Java語言并不難掌握。書中所有的程序都可上機運行,便于讀者通過實際上機運行來體會Java的原理、Java的功能與作用。
本書前三版受到讀者的歡迎,還被評為第七屆全國高校出版社優秀暢銷教材一等獎。由于Java在不斷發展,為了體現Java的新特點,答謝讀者的喜愛,滿足讀者的需要,作者對本書重新進行了修訂。作為一本教材,本書第4版保留上版的基本框架,在內容的編排上體現了新的計算機教學思想和方法,以“提出問題—解決問題—歸納必要的結論和概念”的方式介紹Java的編程思路,通過大量的實例和插圖,使讀者盡可能快地熟悉基本概念和掌握基本編程方法。結構上,第1~3章為基礎程序設計知識,第4章和第5章為面向對象程序編程知識,第6~8章是異常、泛型、集合、常用類介紹,第9~13章是綜合應用程序開發知識,體現了深入淺出、由簡到繁、循序漸進的特點。
這次再版還增加了JDK1.5~JDK1.8以來的一些Java新特性,主要內容放在“知識拓展”一節中,同時對其他例子也使用了新方法。
本書主要特色如下:
1. 通俗易懂、圖文并茂
本書通過具體的例子來介紹有關Java語言的概念、方法和技術,每章都有大量完整的例子,用來說明使用Java語言編程的基本步驟和基本方法,并有圖片配合說明,通俗易懂,讀者完全可以按書中介紹的方法運行每個程序實例,通過實例理解Java語言的基本思想和編程技巧。
2. 內容全面、結構清晰
本書從Java語言的產生、特點、結構開始介紹,然后介紹如何得到Java語言的開發工具、如何設置Java的開發環境、編寫Java程序,再系統介紹Java語言的基本語法和面向對象的編程技術、異常處理機制、圖形用戶界面、多線程機制、圖形、圖像與多媒體技術、訪問數據庫技術。
3. 循序漸進
本書對整個內容做了精心設計和安排,首先介紹Java語言字符模式的編程方法,然后介紹使用圖形用戶界面的編程方法。循序漸進,先易后難,逐步深入,通過具體實例引出后續內容或鞏固前面介紹的內容。在“知識拓展”一節介紹一些Java新特性與抽象概念,為讀者深入了解Java知識指出學習方向。
4. 實踐性強
在使用本書學習時,可結合具體的實例,上機實踐。為方便讀者使用書中實例,本次改版統一為書中Java實例編寫了主類名,如例1.1中編寫的源文件名稱為exp1_1.java,使實例與源程序文件做到更好的對應。
本書主要內容:
在內容上第4版有了很大改變。對原來的內容進行重新整理,添加了新的例子,所有的程序都是使用最新的Java開發工具完成的。
第1章是Java快速入門,全面介紹Java語言的概況,引導讀者進入Java世界,指導讀者使用最新的JDK工具,添加了專用的Java開發編輯工具Eclipse的使用方式。
第2章和第3章介紹Java語法和語句構成,這是學習Java必須掌握的基本內容。
第4章和第5章是Java面向對象編程的內容,深入淺出地介紹面向對象編程的核心: 對象、類、子類、繼承、多態等基本概念,還介紹了包與接口的創建與使用方法。
第6章介紹Java的異常處理機制,使讀者可以掌握一些抽象的專用的Java知識。
第7章做了調整,增加了Java泛型與集合的內容,幫助讀者了解什么是泛型與集合,如何使用泛型與集合知識,使讀者了解Java語言的新功能。
第8章介紹常用系統類,對其中的類做了一些調整,以便讀者掌握更新的Java類庫和方法,幫助讀者了解在系統類的基礎上如何不用花很大精力就能設計功能強大的Java程序。
第9章介紹多線程技術,它是Java的主要特色之一,使用多線程技術可以編寫許多適用的程序,為開發綜合應用程序打基礎。
第10章介紹圖形用戶界面的容器與組件,利用這些容器與組件可進行圖形用戶界面設計,編寫方便適用的窗口界面,將原來的兩章合并為一章。
第11章是Java輕松的一面,讀者將在這里學習如何畫圖、如何顯示圖像、如何設計動畫以及如何使用數據統計圖。
第12章是數據庫訪問,首先介紹MySQL數據庫保存數據的方法,然后介紹如何使用Java程序對數據庫進行操作,了解使用SQL語句對數據庫進行訪問控制的方法,掌握綜合應用前面所學知識開發一個圖形用戶界面對數據庫進行訪問控制的知識。
第13章介紹Java的一些綜合實例,綜合體現了前面各章基礎知識與編程技術,對讀者學習起到承上啟下、融會貫通的作用,通過綜合練習掌握一些解決實際問題的Java編程技巧。
本書有教師配套使用的電子課件、書中實例的源代碼及使用的相關軟件,由出版社提供給使用本教材的授課老師,同時還配套出版有本書的習題集。
本書由邵麗萍編寫第7~9章,張馳編寫第4、第5、第13章,張后揚編寫第1~3章,呂慶陽編寫第6章,叢心怡編寫第11章,常廣平編寫第12章,馬瑞編寫第10章。全書由邵麗萍統稿完成。
作者
2017年10月
第1章Java快速入門1
1.1Java簡介1
1.1.1Java的定義1
1.1.2Java的起源和發展2
1.1.3Java的語言特點3
1.1.4Java的用途5
1.2Java開發與運行環境6
1.2.1JDK的下載與安裝6
1.2.2JRE與JVM10
1.2.3在Windows中配置Java運行環境11
1.3編寫與運行Java程序13
1.3.1Java的編程風格13
1.3.2編寫第一個Java源程序14
1.3.3在“命令提示符”窗口編譯與運行
Java程序15
1.4知識拓展——使用Eclipse16
1.4.1Eclipse的下載與安裝16
1.4.2在Eclipse中編寫與運行Java文件17
習題120
第2章Java基本語法22
2.1標識符、關鍵字與分隔符22
2.1.1標識符23
2.1.2關鍵字24
2.1.3分隔符24
2.2基本數據類型與變量26
2.2.1基本數據類型26
2.2.2常量27
2.2.3變量28
2.2.4數據類型的轉換31
2.3表達式與運算符32
2.3.1賦值運算符32
2.3.2算術運算符33
2.3.3關系運算符34
2.3.4邏輯運算符35
2.3.5條件運算符36
2.3.6位運算符36
2.3.7其他運算符37
2.3.8運算符的優先級37
2.4數組與枚舉39
2.4.1一維數組的聲明39
2.4.2一維數組的創建與初始化39
2.4.3多維數組41
2.5知識拓展——foreach語法與枚舉41
2.5.1foreach語法41
2.5.2枚舉類型42
習題243
第3章Java語句及其控制結構45
3.1Java語句的類型45
3.1.1Java程序構成45
3.1.2Java語句的種類46
3.2選擇語句48
3.2.1單分支選擇語句(if語句)48
3.2.2二分支選擇語句(if…else語句)48
3.2.3多分支選擇語句(if…else if…else語句)49
3.2.4嵌套的if…else語句50
3.2.5開關語句(switch語句)51
3.2.6在switch語句中應用枚舉類型53
3.3循環語句54
3.3.1確定次數循環語句(for循環)54
3.3.2foreach 循環語句56
3.3.3先判定后執行循環語句(while循環)57
3.3.4先執行后判定循環語句(do…while循環)58
3.3.5嵌套使用循環語句59
3.3.6循環語句小結59
3.4跳轉語句60
3.4.1break語句60
3.4.2continue語句60
3.4.3帶標號的continue語句61
3.4.4return語句62
3.5知識拓展——注解62
3.5.1注解概述63
3.5.2內置注解與元注解63
3.5.3自定義注解65
習題365
第4章面向對象編程68
4.1面向對象基本概念68
4.1.1對象與類68
4.1.2封裝與消息70
4.1.3繼承與多態71
4.1.4接口72
4.1.5面向對象的Java程序72
4.2類與對象74
4.2.1類的聲明與修飾74
4.2.2不同含義的類77
4.2.3創建對象80
4.2.4構造方法84
4.3成員變量與訪問控制85
4.3.1成員變量的聲明85
4.3.2成員變量的修飾86
4.3.3成員變量與局部變量的區別88
4.4成員方法與參數傳遞機制90
4.4.1成員方法的設計90
4.4.2成員方法的聲明與修飾92
4.4.3方法參數的傳值方式94
4.4.4Java新特性——方法中的可變參數96
4.4.5方法小結97
4.5知識拓展——UML類圖98
習題499
第5章深入類102
5.1類的繼承性102
5.1.1類的層次關系103
5.1.2成員變量的繼承和隱藏104
5.1.3成員方法的繼承與覆蓋106
5.1.4This和super關鍵字107
5.2類的多態性110
5.2.1成員方法的重載110
5.2.2構造方法的重載111
5.2.3避免重載出現歧義112
5.2.4向上轉型113
5.3接口114
5.3.1實現系統提供的接口114
5.3.2創建自定義接口116
5.3.3接口的多繼承118
5.3.4接口變量與接口回調118
5.3.5接口的默認方法119
5.3.6接口與抽象類的對比120
5.3.7面向接口的UML圖121
5.4包121
5.4.1包機制121
5.4.2Java的API系統包122
5.4.3包引用125
5.4.4創建自定義包126
5.5知識拓展——Java設計模式127
5.5.1設計模式的分類127
5.5.2Java設計原則129
習題5129
第6章Java的異常處理機制132
6.1異常處理機制概述132
6.1.1錯誤與異常132
6.1.2異常發生的原因133
6.1.3如何處理異常133
6.2異常類的層次結構134
6.2.1Exception異常類的子類135
6.2.2Error錯誤類的子類136
6.3異常的處理136
6.3.1catch子句136
6.3.2throw語句139
6.3.3throws子句139
6.3.4finally語句142
6.3.5編譯時對異常情況的檢查143
6.4創建自己的異常類143
6.4.1創建自定義異常類143
6.4.2異常的使用原則144
6.5知識拓展——異常處理的新特性145
6.5.1try…with…resources語句145
6.5.2捕獲多個異常146
6.5.3簡單處理反射方法的異常類147
習題6148
第7章Java泛型與集合150
7.1泛型150
7.1.1泛型概述151
7.1.2泛型類152
7.1.3泛型接口153
7.1.4泛型方法154
7.1.5有界類型155
7.1.6通配符157
7.2Java集合概述158
7.2.1集合的概念158
7.2.2集合的框架159
7.2.3集合主要接口與實現類160
7.2.4Collection接口的應用161
7.3三種典型集合162
7.3.1Set集163
7.3.2List序列165
7.3.3Map映射166
7.4知識拓展——函數式接口與Lambda表達式169
7.4.1函數式接口169
7.4.2Lambda表達式170
7.4.3方法引用171
習題7172
第8章常用系統類173
8.1字符串類173
8.1.1字符串類的特點173
8.1.2字符串類的應用174
8.1.3String類的常用方法175
8.1.4StringBuffer類的常用方法179
8.2Java輸入輸出流類180
8.2.1Java的標準輸入輸出180
8.2.2輸入輸出流框架181
8.2.3輸入輸出流類的應用184
8.2.4RandomAccessFile類185
8.2.5對象序列化與對象流類186
8.2.6使用輸入輸出流小結188
8.3其他常用類189
8.3.1數學函數類Math189
8.3.2新日期類190
8.3.3隨機數類Random191
8.3.4運行時Runtime類191
8.3.5控制臺輸入Scanner類192
8.3.6拆箱裝箱的包裝類193
8.3.7定時器Timer類和定時任務
TimerTask類194
8.4知識拓展——反射機制相關的類195
8.4.1Class類195
8.4.2java.lang.reflect包中的重要類195
8.4.3反射機制的應用196
習題8198
第9章多線程機制201
9.1多線程的概念201
9.1.1程序、進程和多任務201
9.1.2線程202
9.1.3多線程202
9.1.4線程的生命周期與Java的多線程機制202
9.2創建線程對象203
9.2.1通過繼承Thread類創建線程對象203
9.2.2通過Runnable接口創建線程對象205
9.3線程的優先級與狀態205
9.3.1線程類的方法206
9.3.2控制線程的優先級207
9.3.3控制線程的狀態208
9.4Java的線程同步機制與應用模型209
9.4.1線程的同步機制210
9.4.2生產消費模型210
9.4.3共用公司銀行賬戶模型214
9.4.4線程通信——水塘模型215
9.5使用多線程應注意的問題218
9.5.1防止線程死鎖218
9.5.2使用多線程的代價219
9.6知識拓展——多線程的新特性219
9.6.1線程池219
9.6.2通過Callable接口創建有返回值的線程221
習題9222
第10章圖形用戶界面224
10.1圖形用戶界面概述224
10.1.1Swing與AWT組件224
10.1.2Swing類的層次結構225
10.1.3布局管理器225
10.1.4Java的事件處理機制227
10.2容器229
10.2.1窗口229
10.2.2對話框與精確定位組件229
10.2.3面板230
10.2.4分隔面板與邊界管理器應用231
10.2.5選項卡面板233
10.3基本組件234
10.3.1標簽文本框與網格管理器應用234
10.3.2按鈕與自建監聽器235
10.3.3單選按鈕與內建監聽器237
10.3.4復選框238
10.3.5下拉列表框與匿名監聽器240
10.3.6文本區與滾動條241
10.3.7創建容器與組件小結243
10.4菜單組件243
10.4.1菜單欄243
10.4.2多級菜單245
10.4.3文件選擇器與執行命令的菜單246
10.4.4工具欄247
10.4.5彈出式菜單與適配器的應用249
10.5知識拓展——表格251
10.5.1普通表格與卡片管理器應用251
10.5.2創建默認表格模型253
10.5.3維護表格254
習題10256
第11章圖形與多媒體處理258
11.1使用Graphics繪制基本圖形258
11.1.1如何使用顏色對象259
11.1.2繪制直線和矩形260
11.1.3繪制橢圓和圓弧261
11.1.4繪制多邊形263
11.2使用Graphics2D繪制基本圖形264
11.2.1繪制二維直線264
11.2.2繪制二維矩形265
11.3使用Graphics繪制文字圖形266
11.3.1繪制字符串、字符和字節文字267
11.3.2字體控制268
11.3.3不同顏色的文字269
11.4圖像處理270
11.4.1圖像種類270
11.4.2圖像的顯示271
11.4.3圖像的縮放顯示272
11.5動畫處理273
11.5.1動畫原理273
11.5.2用線程實現動畫275
11.6知識拓展——Java數據統計圖277
11.6.1柱形圖278
11.6.2餅圖280
11.6.3折線圖282
習題11284
第12章訪問數據庫286
12.1數據庫和JDBC286
12.1.1數據庫下載與安裝286
12.1.2MySQL的操作288
12.1.3JDBC簡介290
12.1.4創建連接數據庫的公用類290
12.2通過Java程序訪問數據庫293
12.2.1在數據庫中創建數據表294
12.2.2添加和查詢數據294
12.3通過窗口界面訪問數據庫297
12.3.1添加學生信息297
12.3.2修改學生信息300
12.3.3刪除學生信息303
習題12306
第13章綜合應用程序實例307
13.1數值變換運算307
13.2幻燈機效果308
13.3利用滑塊改變背景顏色309
13.4對象的克隆310
13.5正弦曲線311
13.6在畫布上手工畫圖312
13.7電閃雷鳴的動畫314
13.8控制移動的文字316
13.9水中倒影319
13.10圖形鐘320
習題13323
編后語325
第5章
深入類
Java的繼承性可以實現軟件重用,Java的多態性可以使程序增加新功能變得容易,Java的接口可以實現多重繼承的功能,通過接口還可以將設計與實現分離,使編寫的代碼更通用,更加容易維護。包是類和接口的集合。利用包可以把用戶常用的類、功能相似的類與具有公共變量與空方法的接口放在一個包中。
本章的內容主要解決以下問題:
什么是父類與子類?
如何創建子類?
在同一個應用程序中如何區別子類與父類的成員?
如何隱藏父類的成員變量?
如何覆蓋父類的成員方法?
什么是接口?它有什么特點?
如何創建自定義接口?
如何引用包及包中的類?
如何創建自定義包?如何在包中存放類?
5.1類的繼承性
新類可從現有的類中產生,將保留現有類的狀態屬性和方法并可根據需要加以修改。新類還可添加新的狀態屬性和方法,這些新增功能允許以統一的風格處理不同類型的數據。這種現象就稱為類的繼承。例如從小狗類中繼承的新類除了有小狗原來的特性以外,還可以增加顏色狀態和發聲的方法等。
本節主要介紹聲明繼承父類的子類的方式、從父類繼承成員變量與成員方法的方式、隱藏父類成員變量的方法、覆蓋父類成員方法的方法、this和super的作用。5.1.1類的層次關系〖*2〗1. 父類與子類的關系當建立一個新類時,不必寫出全部成員變量和成員方法。只要簡單地聲明這個類是從一個已定義的類繼承下來的,就可以引用被繼承類的全部成員。
Java提供了一個龐大的類庫讓開發人員繼承和使用。設計這些類是出于公用的目的,因此,很少有某個類恰恰滿足用戶的需要。用戶必須自己設計能處理實際問題的類,如果新設計的類僅僅實現了繼承,則和父類毫無兩樣。所以,通常要對子類進行擴展,即添加新的屬性和方法,使得子類比父類大,更具特殊性,代表著一組更具體的對象,有句話說“青出于藍而勝于藍”,繼承的意義就在于此。
2. 聲明子類的方式
聲明子類的語法格式:\[修飾詞\] class 子類名 extends 父類名可見,在類的聲明語句中加入extends關鍵字,然后指定父類名即可通過繼承父類聲明一個子類,例如:public class Animal extends Object
public class Dog extends Animal
public class Person上述第1條語句聲明子類Animal的父類是Object,但編程中通常會省略extends Object子句;第2條語句聲明子類Dog的父類是Animal;第3條語句在字面上沒有extends關鍵字,但實際上等價于public class Person extends Object。
3. Java類的層次結構
Java類的繼承是從什么地方開始的?又是如何延續下來的呢?看圖5.1所示的模擬圖。
圖5.1Java類的層次結構
圖5.1反映了Java類的層次結構。最頂端的類是Object,它在java.lang中定義,是所有類的始祖。一個類可以有多個子類,也可以沒有子類,但它必定有一個父類(Object除外)。
子類不能繼承父類中的private成員,除此之外,其他所有的成員都可以通過繼承變為子類的成員。對繼承的理解可以擴展到整個父類的分支,也就是說,子類繼承的成員實際上是整個父系的所有成員。例如,toString這個方法是在Object中聲明的,被層層繼承了下來,所有的子孫類都可以繼承,使用這個方法輸出當前對象的基本信息。
至此,可以得出如下結論:
(1) 子類只能有一個父類。
(2) 如果省略了extends,子類的父類是Object。
(3) 子類繼承了父類和祖先的成員,可以使用這些成員。
(4) 子類可以添加新的成員變量和方法,也可以隱藏父類的成員變量或覆蓋父類的成員方法。
5.1.2成員變量的繼承和隱藏〖*2〗1. 成員變量的繼承子類中的成員變量可以是子類自己創建的,其他是通過其父類繼承的。子類繼承根據二者所在包的異同分為以下兩種情況:
(1) 子類與父類在同一包,子類繼承父類中非private修飾的成員變量和方法。
(2) 子類與父類不在同一包,父類中使用private與package修飾的私有成員變量和友好的成員變量不會被繼承,子類只能繼承父類中使用public和protected的成員變量與方法。
例5.1下面的3個程序說明從點Point類擴展到線Line類和圓Circle類的方法,這是3個公共類,不能放在同一個文件中。它們屬于方法類,僅用來定義一個類,可以進行編譯處理。它們都沒有main方法及輸出語句,如果運行程序看不到什么結果。public class Point {
protected int x, y;
Point(int a, int b) {setPoint(a, b);}//構造方法
Point() {}
public void setPoint(int a, int b) { x=a; y=b; }