[ 收藏 ] [ 繁体中文 ]  
臺灣貨到付款、ATM、超商、信用卡PAYPAL付款,4-7個工作日送達,999元臺幣免運費   在線留言 商品價格為新臺幣 
首頁 電影 連續劇 音樂 圖書 女裝 男裝 童裝 內衣 百貨家居 包包 女鞋 男鞋 童鞋 計算機周邊

商品搜索

 类 别:
 关键字:
    

商品分类

  •  管理

     一般管理学
     市场/营销
     会计
     金融/投资
     经管音像
     电子商务
     创业企业与企业家
     生产与运作管理
     商务沟通
     战略管理
     商业史传
     MBA
     管理信息系统
     工具书
     外文原版/影印版
     管理类职称考试
     WTO
     英文原版书-管理
  •  投资理财

     证券/股票
     投资指南
     理财技巧
     女性理财
     期货
     基金
     黄金投资
     外汇
     彩票
     保险
     购房置业
     纳税
     英文原版书-投资理财
  •  经济

     经济学理论
     经济通俗读物
     中国经济
     国际经济
     各部门经济
     经济史
     财政税收
     区域经济
     统计 审计
     贸易政策
     保险
     经济数学
     各流派经济学说
     经济法
     工具书
     通货膨胀
     财税外贸保险类考试
     英文原版书-经济
  •  社会科学

     语言文字
     社会学
     文化人类学/人口学
     新闻传播出版
     社会科学总论
     图书馆学/档案学
     经典名家作品集
     教育
     英文原版书-社会科学
  •  哲学

     哲学知识读物
     中国古代哲学
     世界哲学
     哲学与人生
     周易
     哲学理论
     伦理学
     哲学史
     美学
     中国近现代哲学
     逻辑学
     儒家
     道家
     思维科学
     马克思主义哲学
     经典作品及研究
     科学哲学
     教育哲学
     语言哲学
     比较哲学
  •  宗教

  •  心理学

  •  古籍

  •  文化

  •  历史

     历史普及读物
     中国史
     世界史
     文物考古
     史家名著
     历史地理
     史料典籍
     历史随笔
     逸闻野史
     地方史志
     史学理论
     民族史
     专业史
     英文原版书-历史
     口述史
  •  传记

  •  文学

  •  艺术

     摄影
     绘画
     小人书/连环画
     书法/篆刻
     艺术设计
     影视/媒体艺术
     音乐
     艺术理论
     收藏/鉴赏
     建筑艺术
     工艺美术
     世界各国艺术概况
     民间艺术
     雕塑
     戏剧艺术/舞台艺术
     艺术舞蹈
     艺术类考试
     人体艺术
     英文原版书-艺术
  •  青春文学

  •  文学

     中国现当代随笔
     文集
     中国古诗词
     外国随笔
     文学理论
     纪实文学
     文学评论与鉴赏
     中国现当代诗歌
     外国诗歌
     名家作品
     民间文学
     戏剧
     中国古代随笔
     文学类考试
     英文原版书-文学
  •  法律

     小说
     世界名著
     作品集
     中国古典小说
     四大名著
     中国当代小说
     外国小说
     科幻小说
     侦探/悬疑/推理
     情感
     魔幻小说
     社会
     武侠
     惊悚/恐怖
     历史
     影视小说
     官场小说
     职场小说
     中国近现代小说
     财经
     军事
  •  童书

  •  成功/励志

  •  政治

  •  军事

  •  科普读物

  •  计算机/网络

     程序设计
     移动开发
     人工智能
     办公软件
     数据库
     操作系统/系统开发
     网络与数据通信
     CAD CAM CAE
     计算机理论
     行业软件及应用
     项目管理 IT人文
     计算机考试认证
     图形处理 图形图像多媒体
     信息安全
     硬件
     项目管理IT人文
     网络与数据通信
     软件工程
     家庭与办公室用书
  •  建筑

  •  医学

     中医
     内科学
     其他临床医学
     外科学
     药学
     医技学
     妇产科学
     临床医学理论
     护理学
     基础医学
     预防医学/卫生学
     儿科学
     医学/药学考试
     医院管理
     其他医学读物
     医学工具书
  •  自然科学

     数学
     生物科学
     物理学
     天文学
     地球科学
     力学
     科技史
     化学
     总论
     自然科学类考试
     英文原版书-自然科学
  •  工业技术

     环境科学
     电子通信
     机械/仪表工业
     汽车与交通运输
     电工技术
     轻工业/手工业
     化学工业
     能源与动力工程
     航空/航天
     水利工程
     金属学与金属工艺
     一般工业技术
     原子能技术
     安全科学
     冶金工业
     矿业工程
     工具书/标准
     石油/天然气工业
     原版书
     武器工业
     英文原版书-工业技
  •  农业/林业

  •  外语

  •  考试

  •  教材

  •  工具书

  •  中小学用书

  •  中小学教科书

  •  动漫/幽默

  •  烹饪/美食

  •  时尚/美妆

  •  旅游/地图

  •  家庭/家居

  •  亲子/家教

  •  两性关系

  •  育儿/早教

     保健/养生
     体育/运动
     手工/DIY
     休闲/爱好
     英文原版书
     港台图书
     研究生
     工学
     公共课
     经济管理
     理学
     农学
     文法类
     医学
  • Java 8基礎應用與開發(第2版)-微課版
    該商品所屬分類:計算機/網絡 -> 程序設計
    【市場價】
    761-1104
    【優惠價】
    476-690
    【作者】 周清平、鐘鍵、黃雲、覃遵躍、QST青軟實訓 
    【所屬類別】 圖書  教材  研究生/本科/專科教材  工學圖書  計算機/網絡  程序設計  Java 
    【出版社】清華大學出版社 
    【ISBN】9787302503569
    【折扣說明】一次購物滿999元台幣免運費+贈品
    一次購物滿2000元台幣95折+免運費+贈品
    一次購物滿3000元台幣92折+免運費+贈品
    一次購物滿4000元台幣88折+免運費+贈品
    【本期贈品】①優質無紡布環保袋,做工棒!②品牌簽字筆 ③品牌手帕紙巾
    版本正版全新電子版PDF檔
    您已选择: 正版全新
    溫馨提示:如果有多種選項,請先選擇再點擊加入購物車。
    *. 電子圖書價格是0.69折,例如了得網價格是100元,電子書pdf的價格則是69元。
    *. 購買電子書不支持貨到付款,購買時選擇atm或者超商、PayPal付款。付款後1-24小時內通過郵件傳輸給您。
    *. 如果收到的電子書不滿意,可以聯絡我們退款。謝謝。
    內容介紹



    開本:16開
    紙張:膠版紙
    包裝:平裝-膠訂

    是否套裝:否
    國際標準書號ISBN:9787302503569
    叢書名:“在實踐中成長”叢書

    作者:周清平、鐘鍵、黃雲、覃遵躍、QST青軟實訓
    出版社:清華大學出版社
    出版時間:2018年07月 


        
        
    "

    產品特色
    編輯推薦
    《Java 8基礎應用與開發(第2版)-微課版》由一線軟件開發工程師親手打造Java入門圖書,以現代教育理念為指導,在講授方式上注意結合應用開發實例,注重培養學生理解面向對像程序設計思想,以提高分析問題和解決實際問題的能力。《Java 8基礎應用與開發(第2版)-微課版》以技術為導向安排章節和實例,每個案例精挑細選,來自企業實際應用,所有程序都是在JDK 8環境下編譯調試通過。 
    內容簡介
    本書深入介紹了Java基礎編程的相關內容,主要涵蓋Java概述、Java語言基礎、面向對像基礎、Java常用的核心類、類之間的關繫、接口、抽像類、異常、泛型與集合。書中所有代碼都是在Java 8環境下調試運行的,並對Java 8的一些新特性進行了全面介紹。
    本書由淺入深對Java SE技術進行了繫統講解,並且重點突出,強調動手操作能力,以一個項目貫穿所有章節的任務實現,使得讀者能夠快速理解並掌握各項重點知識,全面提高分析問題、解決問題以及編碼的能力。
    本書適用面廣,可作為高等院校、培訓機構的Java教材,適用於計算機科學與技術、軟件外包、計算機軟件、計算機網絡、電子商務等專業的程序設計課程的教材。本書適合各種層次的Java學習者和工作者閱讀。
    目錄

    目錄



    第1章Java概述


    視頻講解: 6個,共65分鐘

    任務驅動

    學習路線

     


    目錄


     


     


     


    第1章Java概述


     


     


    視頻講解: 6個,共65分鐘


     


    任務驅動


     


    學習路線


     


    本章目標


     


    1.1Java簡介


     


    1.1.1Java起源


     


    1.1.2Java發展史


     


    1.2Java體繫


     


    1.2.1Java語言優勢


     


    1.2.2Java應用平臺


     


    1.2.3專有名詞


     


    1.2.4Java跨平臺原理


     


    1.2.5垃圾回收機制


     


    1.3JDK工具


     


    1.3.1JDK安裝配置


     


    1.3.2JDK目錄


     


    1.3.3JDK常用工具


     


    1.4HelloWorld程序


     


    1.5輸出與注釋


     


    1.5.1打印輸出


     


    1.5.2注釋


     


    1.6IDE集成開發環境


     


    1.7貫穿任務實現


     


    本章總結


     


    小結


     


    Q&A


     


    章節練習


     


    習題


     


    上機


     


     


    第2章Java語言基礎


     


    視頻講解: 15個,共165分鐘


     


    任務驅動


     


    學習路線


     


    本章目標


     


    2.1字符


     


    2.1.1字符集


     


    2.1.2分隔符


     


    2.1.3標識符


     


    2.1.4關鍵字


     


    2.2變量和常量


     


    2.2.1變量


     


    2.2.2常量


     


    2.2.3變量作用域


     


    2.2.4變量初始化


     


    2.3數據類型


     


    2.3.1基本類型


     


    2.3.2引用類型


     


    2.3.3類型轉換


     


    2.4操作符


     


    2.4操作符


     


    2.4操作符


     


    2.4操作符


     


    2.4.4運算符優先級


     


    2.5流程控制


     


    2.5.1分支結構


     


    2.5.2循環結構


     


    2.5.3轉移語句


     


    2.6數組


     


    2.6.1創建數組


     


    2.6.2初始化數組


     


    2.6.3foreach遍歷數組


     


    2.6.4二維數組


     


    2.7貫穿任務實現


     


    2.7.1實現【任務21】


     


    2.7.2實現【任務22】


     


    2.7.3實現【任務23】


     


    本章總結


     


    小結


     


    Q&A


     


    章節練習


     


    習題


     


    上機


     


    第3章面向對像基礎


     


    視頻講解: 12個,共135分鐘


     


    任務驅動


     


    學習路線


     


    本章目標


     


    3.1面向對像思想


     


    3.1.1面向對像簡介


     


    3.1.2面向對像名詞


     


    3.1.3面向對像編程特征


     


    3.2類與對像


     


    3.2.1類的聲明


     


    3.2.2對像的創建和使用


     


    3.3方法


     


    3.3.1方法的參數傳遞機制


     


    3.3.2構造方法


     


    3.3.3方法重載


     


    3.3.4可變參數


     


    3.4封裝和訪問控制


     


    3.4.1包


     


    3.4.2訪問控制符


     


    3.5靜態成員


     


    3.6對像數組


     


    3.7貫穿任務實現


     


    3.7.1實現【任務31】


     


    3.7.2實現【任務32】


     


    3.7.3實現【任務33】


     


    本章總結


     


    小結


     


    Q&A


     


    章節練習


     


    習題


     


    上機


     


    第4章核心類


     


    視頻講解: 10個,共100分鐘


     


    任務驅動


     


    學習路線


     


    本章目標


     


    4.1基本類型的封裝類


     


    4.2裝箱和拆箱


     


    4.3Object類


     


    4.3.1equals()方法


     


    4.3.2toString()方法


     


    4.4字符串類


     


    4.4.1String類


     


    4.4.2StringBuffer類


     


    4.4.3StringBuilder類


     


    4.5Scanner類


     


    4.6Math類


     


    4.7Date類


     


    4.8貫穿任務實現


     


    4.8.1實現【任務41】


     


    4.8.2實現【任務42】


     


    4.8.3實現【任務43】


     


    本章總結


     


    小結


     


    Q&A


     


    章節練習


     


    習題


     


    上機


     


    第5章類之間的關繫


     


    視頻講解: 8個,共80分鐘


     


    任務驅動


     


    學習路線


     


    本章目標


     


    5.1關繫概述


     


    5.2繼承與多態


     


    5.2.1繼承


     


    5.2.2多態


     


    5.2.3super關鍵字


     


    5.2.4final關鍵字


     


    5.3其他關繫


     


    5.3.1依賴關繫


     


    5.3.2關聯關繫


     


    5.3.3聚合關繫


     


    5.3.4組成關繫


     


    5.4內部類


     


    5.4.1成員內部類


     


    5.4.2局部內部類


     


    5.4.3靜態內部類


     


    5.4.4匿名內部類


     


    5.5單例模式


     


    5.6貫穿任務實現


     


    5.6.1實現【任務51】


     


    5.6.2實現【任務52】


     


    5.6.3實現【任務53】


     


    5.6.4實現【任務54】


     


    本章總結


     


    小結


     


    Q&A


     


    章節練習


     


    習題


     


    上機


     


    第6章抽像類和接口


     


    視頻講解: 6個,共45分鐘


     


    任務驅動


     


    學習路線


     


    本章目標


     


    6.1抽像類


     


    6.1.1定義抽像類


     


    6.1.2使用抽像類


     


    6.2接口


     


    6.2.1定義接口


     


    6.2.2實現接口


     


    6.2.3接口的繼承


     


    6.2.4面向接口編程


     


    6.3instanceof關鍵字


     


    6.4貫穿任務實現


     


    6.4.1實現【任務61】


     


    6.4.2實現【任務62】


     


    6.4.3實現【任務63】


     


    6.4.4實現【任務64】


     


    本章總結


     


    小結


     


    Q&A


     


    章節練習


     


    習題


     


    上機


     


    第7章異常


     


    視頻講解: 5個,共45分鐘


     


    任務驅動


     


    學習路線


     


    本章目標


     


    7.1異常概述


     


    7.1.1異常類


     


    7.1.2異常處理機制


     


    7.2捕獲異常


     


    7.2.1try...catch語句


     


    7.2.2try...catch...finally語句


     


    7.2.3自動關閉資源的try語句


     


    7.2.4嵌套的try...catch語句


     


    7.2.5多異常捕獲


     


    7.3拋出異常


     


    7.3.1throw拋出異常對像


     


    7.3.2throws聲明拋出異常序列


     


    7.4自定義異常


     


    7.5貫穿任務實現


     


    7.5.1實現【任務71】


     


    7.5.2實現【任務72】


     


    7.5.3實現【任務73】


     


    本章總結


     


    小結


     


    Q&A


     


    章節練習


     


    習題


     


    上機


     


    第8章泛型與集合


     


    視頻講解: 10個,共115分鐘


     


     


    任務驅動


     


    學習路線


     


    本章目標


     


    8.1泛型


     


    8.1.1泛型定義


     


    8.1.2通配符


     


    8.1.3有界類型


     


    8.1.4泛型的限制


     


    8.2集合概述


     


    8.2.1集合框架


     


    8.2.2迭代器接口


     


    8.3集合類


     


    8.3.1Collection接口


     


    8.3.2List接口及其實現類


     


    8.3.3Set接口及其實現類


     


    8.3.4Queue接口及其實現類


     


    8.3.5Map接口及其實現類


     


    8.4集合轉換


     


    8.5集合工具類


     


    8.6貫穿任務實現


     


    8.6.1實現【任務81】


     


    8.6.2實現【任務82】


     


    8.6.3實現【任務83】


     


    8.6.4實現【任務84】


     


    8.6.5實現【任務85】


     


    本章總結


     


    小結


     


    Q&A


     


    章節練習


     


    習題


     


    上機


     


     


    附錄AEclipse集成開發環境


     


    A.1Eclipse簡介


     


    A.2Eclipse下載及安裝


     


    A.3Eclipse常用操作


     


    A.4Eclipse調試


     


    A.5Eclipse導入


     


    A.6Eclipse快捷鍵


     


    附錄Bjavac命令


     


    B.1選項


     


    B.2命令行參數文件


     


    附錄Cjava命令


     


    附錄Djar包


    D.1jar命令語法


     


    D.2選項


     


    D.3設置應用程序的入口點


     


    附錄E靜態塊


     


    附錄F常用的類


     


    附錄GASCII表

    前言


    前言





    前言




    本書不是一本簡單的Java入門教材,不是知識點的鋪陳,而是致力於將知識點融入實際項目的開發中。編寫Java技術的入門教材,困難的事情是將一些復雜、難以理解的編程思想讓初學者能夠輕松理解並快速掌握。本書對每個知識點都進行了深入分析,針對知識點在語法、示例、代碼及任務實現上進行階梯式層層強化,讓讀者對知識點從入門到靈活運用一步一步腳踏實地進行。本書的特色是采用一個“QDMS數據挖掘”項目,將所有章節重點技術進行貫穿,每章項目代碼層層迭代、不斷完善,終形成一個完整的繫統。通過貫穿項目以點連線,多線成面,使得讀者能夠快速理解並掌握各項重點知識,全面提高分析問題、解決問題以及動手編程的能力。1. 項目簡介QDMS數據挖掘項目是一個基於C/S(Client/Server,客戶/服務器)架構的繫統,由QDMS客戶端和QDMS服務器端兩部分組成:  QDMS客戶端作為繫統的一部分,其主要任務是對數據進行采集、分析和匹配,並將匹配成功的數據發送到QDMS服務器端,同時將匹配成功和未成功的數據分別保存到不同的日志文件中。 QDMS服務器端用於接收QDMS客戶端發送來的數據,並將數據保存到數據庫中,同時將數據歸檔到文本文件中。QDMS服務器端對接收的數據提供監控和查詢功能。QDMS數據挖掘項目可以對多種數據類型進行采集,例如日志數據信息的采集、物流數據信息的采集等,多種數據信息都是基於繼承關繫的。2. 貫穿項目模塊QDMS貫穿項目中所有模塊的實現都穿插在本書和《Java 8高級應用與開發》的所有章節中,每個章節在前一章節的基礎上進行任務實現,對項目逐步進行迭代、升級,終形成一個完整的項目,並將Java課程重點技能點進行強化應用。其中,本書基於DOS菜單驅動模式完成數據采集、數據匹配以及數據顯示功能模塊的實現,《Java 8高級應用與開發》基於Swing GUI圖形界面用戶事件交互模式完成所有剩餘模塊。



    除此之外,我們還提供與本書配套的實驗手冊,供學生實驗課使用,便於學生對知識的應用進行鞏固和升級。實驗手冊中的貫穿項目與教材中的貫穿項目是並行的,兩個項目模塊之間是對應一致的,如下圖所示。



    3. 基礎章節任務實現




    章目標貫穿任務實現
    第1章
    Java概述項目搭建【任務11】 創建QDMS項目,搭建項目目錄層次第2章
    Java語言基礎菜單驅動【任務21】 使用循環語句實現菜單驅動,當用戶選擇0時退出應用
    【任務22】 使用數組存儲采集的整數數據
    【任務23】 顯示采集的數據,要求每行顯示5個第3章
    面向對像基礎日志數據信息采集【任務31】 實現日志實體類,日志信息用於記錄用戶登錄及登出狀態
    【任務32】 創建日志業務類,實現日志數據的信息采集及顯示功能
    【任務33】 創建一個日志測試類,演示日志數據的信息采集及顯示
    續表

    章目標貫穿任務實現
    第4章
    核心類物流數據信息采集【任務41】 編寫物流信息實體類
    【任務42】 創建物流業務類,實現物流數據的信息采集及顯示功能
    【任務43】 創建一個物流測試類,演示物流數據的信息采集及顯示第5章
    類之間的關繫使用繼承重構數據采集業務【任務51】 編寫基礎信息實體類
    【任務52】 使用繼承重構日志、物流實體類,並測試運行
    【任務53】 編寫日志數據匹配類,對日志實體類數據進行匹配
    【任務54】 編寫物流數據匹配類,對物流實體類數據進行匹配第6章
    抽像類和接口使用接口和抽像類實現數據分析和過濾【任務61】 創建數據分析接口
    【任務62】 創建數據過濾抽像類
    【任務63】 編寫日志數據分析類和物流數據分析類
    【任務64】 編譯一個測試類測試日志、物流數據的分析
    第7章
    異常增加異常處理【任務71】 菜單驅動增加異常處理,以防用戶輸入不合法的菜單
    【任務72】 日志和物流數據采集增加異常處理,以防用戶輸入不合法的數據
    【任務73】 自定義數據分析異常類,數據分析處理過程中拋出自定義異常第8章
    泛型與集合使用泛型集合對數據采集、過濾分析以及輸出功能進行迭代升級【任務81】 使用泛型集合迭代升級數據分析接口和數據過濾抽像類
    【任務82】 使用泛型集合迭代升級日志數據分析類
    【任務83】 使用泛型集合迭代升級物流數據分析類
    【任務84】 在日志和物流業務類中增加顯示泛型集合數據的功能
    【任務85】  使用泛型集合迭代升級主菜單驅動並運行測試
    本書由吉首大學的周清平負責全書統稿,鐘鍵、黃雲、覃遵躍參與編寫,QST青軟實訓教育研究院的老師參與本書部分章節和部分項目案例的編寫和審核工作。作者均已從事計算機教學和項目開發多年,擁有豐富的教學和實踐經驗。由於作者水平和時間有限,書中疏漏和不足之處在所難免,懇請廣大讀者及專家不吝賜教。本書相關資源的獲取方式請參閱序言。
    編者2018年1月






    在線試讀
    第5章類之間的關繫
    任務驅動本章任務是使用繼承重構“QDMS數據挖掘”繫統的數據采集的實體類並測試:  【任務51】編寫基礎信息實體類。 【任務52】使用繼承重構日志、物流實體類,並測試運行。 【任務53】編寫日志數據匹配類,對日志實體類數據進行匹配。 【任務54】編寫物流數據匹配類,對物流實體類數據進行匹配。
    學習路線

    本章目標

    知識點Listen(聽)Know(懂)Do(做)Revise(復習)Master(精通)

    關繫概述★★繼承★★★★★多態★★★其他關繫★★★內部類★★單例模式★★
    第5章類之間的關繫
    任務驅動本章任務是使用繼承重構“QDMS數據挖掘”繫統的數據采集的實體類並測試:  【任務51】編寫基礎信息實體類。 【任務52】使用繼承重構日志、物流實體類,並測試運行。 【任務53】編寫日志數據匹配類,對日志實體類數據進行匹配。 【任務54】編寫物流數據匹配類,對物流實體類數據進行匹配。
    學習路線





    本章目標





    知識點Listen(聽)Know(懂)Do(做)Revise(復習)Master(精通)

    關繫概述★★繼承★★★★★多態★★★其他關繫★★★內部類★★單例模式★★

    5.1關繫概述
    在面向對像的程序設計中,通常不會存在一個孤立的類,類和類之間總是存在一定的關繫,通過這些關繫,纔能實現軟件的既定功能。類與類之間的關繫對於深入理解面向對像概念具有非常重要的作用,也有利於程序員從專業的、合理的角度面向對像分析問題和解決問題。根據UML(Unified Modeling Language,統一建模語言)規範,類與類之間存在六種關繫。●繼承: 一個類可以繼承另外一個類,並在此基礎上添加自己的特有功能。繼承也稱為泛化,表現的是一種共性與特性的關繫。●實現: 一個類實現接口中聲明的方法,其中接口對方法進行聲明,而類完成方法的定義,即實現具體功能。實現是類與接口之間常用的關繫,一個類可以實現一個或多個接口中的方法。●依賴: 在一個類的方法中操作另外一個類的對像,這種情況稱為個類依賴於第二個類。●關聯: 在一個類中使用另外一個類的對像作為該類的成員變量,這種情況稱為關聯關繫。關聯關繫體現的是兩個類之間語義級別的一種強依賴關繫。●聚合: 聚合關繫是關聯關繫的一種特例,體現的是整體與部分的關繫,即hasa的關繫。通常表現為一個類(整體)由多個其他類的對像(部分)作為該類的成員變量,此時整體與部分之間是可以分離的,整體和部分都可以具有各自的生命周期,部分可以屬於多個整體對像,也可以為多個整體對像共享。●組成: 組成關繫也是關聯關繫的一種特例,與聚合關繫一樣也是體現整體與部分的關繫,但組成關繫中的整體與部分是不可分離的,即containsa的關繫,這種關繫比聚合更強,也稱為強聚合,當整體的生命周期結束後,部分的生命周期也隨之結束。類與類之間的這六種關繫中,繼承和實現體現了類與類之間的一種縱向的關繫,而其餘四種則體現了類與類之間的橫向關繫。其中,關聯、聚合、組成這三種關繫更多體現的是一種語義上的區別,而在代碼上則是無法區分的。注意本章隻對繼承、依賴、關聯、聚合以及組成這五種關繫進行介紹,而實現關繫涉及接口的知識,因此在本書的第6章再做介紹。UML是一種流行的面向對像分析與設計技術,對UML的詳細介紹已超出本書的範疇,讀者可以參閱其他相關資料進行了解和學習。



    視頻講解


    視頻講解

    5.2繼承與多態
    繼承與多態是面向對像的特征之一,也是實現軟件復用的重要手段。5.2.1繼承繼承是類之間的一個非常重要的關繫,是面向對像編程的基石及核心。
    在Java程序中,一個類可以繼承另外一個類,被繼承的類通常稱為“父類”(parent class)、“超類”(super class)或者“基類”(base class),繼承者通常稱為“子類”(child class或subclass)或者“派生類”(derived class)。子類與父類的繼承關繫如圖51所示。
    Java中的繼承具有單一繼承的特點,即每個子類隻有一個直接父類,但一個父類可以有多個子類。通常可以將父類創建成一個通用的類,定義子類共有的通用特性; 而子類則是父類的一個專門用途的版本,子類不僅繼承了父類的通用特性,並且在此基礎之上增加了自己特有的屬性和方法,以滿足新的需求。在圖51(b)中,學生子類的成員屬性除了擁有學號、班號、年級、校名和學習課程外,還擁有父類“人”的成員屬性身份證號和姓名等信息; 學生子類的成員方法除了擁有出勤、上課、參加考試和查詢成績之外,還擁有父類“人”的成員方法喫飯、睡覺和娛樂等。

    圖51繼承關繫


    Java中的繼承通過使用extends關鍵字來實現,其語法格式如下: 
    【語法】



    [訪問符][修飾符] class子類extends父類{
    ...
    }



    【示例】子類繼承父類



    public class SubClass extends SuperClass{
    ...
    }



    上述代碼通過使用extends關鍵字使子類SubClass繼承父類SuperClass。如果定義一個類沒有使用extends繼承任何父類,則自動繼承java.lang.Object類。Object類是所有類的父類,在Java中,所有類都是直接或間接地繼承Object類。Java隻支持單一繼承,因此下面代碼是錯誤的: 



    Class C extends A,B{}//Error,一個類不能繼承多個類



    注意雖然Java不能像C 一樣支持多繼承,但可以通過實現多個接口來彌補。
    在繼承過程中,子類擁有父類所定義的所有屬性和方法,但父類可以通過“封裝”思想隱藏某些數據,隻對子類提供可訪問的屬性和方法。實例化一個子類對像時,會先調用父類構造方法進行初始化,再調用子類自身的構造方法進行初始化,即構造方法的執行次序是: 父類→子類。下述繫列代碼演示在繼承關繫中父類和子類構造方法的調用次序。
    【代碼51】SuperClass.java



    package com.qst.chapter05;


    //父類
    public class SuperClass {
    public int a;


    public SuperClass() {
    System.out.println("調用父類構造方法...");
    a = 10;
    }
    }



    上述代碼定義了一個父類SuperClass,該類提供一個公共屬性a和一個不帶參數的構造方法,並在構造方法中使用輸出語句進行提示和初始化屬性a的值為10。
    【代碼52】SuperClass.java



    package com.qst.chapter05;


    //子類
    public class SubClass extends SuperClass {


    int b;


    public SubClass() {
    System.out.println("調用子類構造方法...");
    b = 20;
    }

    public static void main(String[] args) {
    //實例化一個子類對像
    SubClass obj = new SubClass();








    //輸出子類中的屬性值
    System.out.println("a=" obj.a ",b=" obj.b);
    }


    }



    上述代碼定義了一個子類SubClass並繼承父類SuperClass,除了繼承父類的屬性a,該類還定義了一個自己的屬性b,並在構造方法中使用輸出語句進行提示和初始化屬性b的值為20。在main()方法中直接示例化一個子類對像,並輸出屬性a和b的值。運行結果如下所示: 



    調用父類構造方法...
    調用子類構造方法...
    a=10,b=20



    通過運行結果可以發現: 在構造一個子類對像時,會首先調用父類的構造方法進行初始化,而後再調用子類的構造方法進行初始化。與前面提出的理論是一致的。下述內容通過一個具體的案例來講解如何使用繼承來分析和解決問題。在一個商品信息管理繫統中,需要存儲打印機和手機這兩種商品的信息。其中,打印機和手機的信息如表51所示。

    表51打印機和手機的信息


    打印機(Printer)手機(Mobile)

    打印機型號type手機型號type生產廠商manufacture生產廠商manufacture價格price價格price打印色彩color屏幕大小screenSize打印紙張大小paperSize處理器cpu
    現采用面向對像思想分析得到: 打印機和手機都具有型號、生產廠商以及價格這三個屬性,采用繼承的設計思想,可以將打印機和手機的共同屬性抽取出來形成父類Product類,然後讓Printer和Mobile這兩個子類繼承父類,並分別在子類中添加差異屬性。Product、Printer和Mobile三者之間的繼承關繫模型如圖52所示。

    圖52Printer和Mobile繼承Product類

    下述代碼分別創建Product、Printer和Mobile類,並使Printer和Mobile類繼承Product類。
    【代碼53】Product.java



    package com.qst.chapter05;


    //父類,商品類
    public class Product {
    //屬性,成員變量
    private String type;
    private String manufacture;






    private double price;
    //構造方法
    public Product() {


    }


    public Product(String type, String manufacture, double price) {
    this.type = type;
    this.manufacture = manufacture;
    this.price = price;
    }
    //setter和getter方法
    public String getType() {
    return type;
    }


    public void setType(String type) {
    this.type = type;
    }









    public String getManufacture() {
    return manufacture;
    }


    public void setManufacture(String manufacture) {
    this.manufacture = manufacture;
    }


    public double getPrice() {
    return price;
    }


    public void setPrice(double price) {
    this.price = price;
    }


    }



    上述代碼創建一個商品父類Product,該類提供三個基礎屬性: type、manufacture和price。
    【代碼54】Printer.java



    package com.qst.chapter05;


    public class Printer extends Product {
    //Product的子類Printer
    //屬性,成員變量
    private String color;
    private String paperSize;
    //構造方法
    public Printer() {
    }


    public Printer(String type, String manufacture, double price, String color,
    String paperSize) {
    //給父類中的基礎屬性賦值
    this.setType(type);
    this.setManufacture(manufacture);
    this.setPrice(price);
    //給子類自己的屬性賦值
    this.color = color;
    this.paperSize = paperSize;
    }
    //setter和getter方法
    public String getColor() {
    return color;
    }


    public void setColor(String color) {







    this.color = color;
    }


    public String getPaperSize() {
    return paperSize;
    }


    public void setPaperSize(String paperSize) {
    this.paperSize = paperSize;
    }


    public void display() {//顯示Printer的基本信息
    System.out.println("類型: " this.getType());
    System.out.println("廠商: " this.getManufacture());
    System.out.println("價格: " this.getPrice());
    System.out.println("打印色彩: " this.getColor());
    System.out.println("打印紙張大小: " this.getPaperSize());
    public void printInfo(String msg){//打印機打印msg信息
    System.out.println(this.getManufacture() "打印機正在打印'" msg "'文件");
    }
    }



    上述代碼創建一個子類Printer繼承Product,該類提供一個帶參數的構造方法對屬性進行初始化。
    【代碼55】Mobile.java



    package com.qst.chapter05;


    public class Mobile extends Product {//Product的子類Mobile
    /*  屬性,成員變量*/
    private String screenSize;
    private String cpu;
    //構造方法
    public Mobile() {
    }


    public Mobile(String type, String manufacture, double price,
    String screenSize, String cpu) {
    this.setType(type);
    this.setManufacture(manufacture);
    this.setPrice(price);
    this.screenSize = screenSize;
    this.cpu = cpu;
    }
    //setter和getter方法
    public String getScreenSize() {
    return screenSize;
    }








    public void setScreenSize(String screenSize) {
    this.screenSize = screenSize;
    }


    public String getCpu() {
    return cpu;
    }


    public void setCpu(String cpu) {
    this.cpu = cpu;
    }


    public void display() {//顯示Mobile的基本信息
    System.out.println("類型:" this.getType());
    System.out.println("廠商:" this.getManufacture());
    System.out.println("價格:" this.getPrice());
    System.out.println("屏幕:" this.getScreenSize());
    System.out.println("cpu:" this.getCpu());
    }
    public void sendMessage(String msg){//手機發送信息msg
    System.out.println(this.getManufacture() "手機正在發送'" msg "'信息");
    }
    }



    上述代碼創建一個子類Mobile繼承Product,該類提供一個帶參數的構造方法對屬性進行初始化。
    【代碼56】ClassExtendsDemo.java



    package com.qst.chapter05;


    public class ClassExtendsDemo {


    public static void main(String[] args) {
    //創建一個Printer子類實例
    Printer p = new Printer("噴墨打印機", "惠普", 600, "6色真彩", "A4紙");
    p.display();
    p.printInfo("青軟實訓");
    System.out.println("-----------------");
    //創建一個Mobile子類實例
    Mobile m = new Mobile("iPhone 6", "蘋果", 5288, "4.7英寸", "雙核");
    m.display();
    m.sendMessage("青軟實訓");
    }
    }



    上述代碼創建一個測試類,在main()方法中分別實例化Printer和Mobile兩個子類對像,並調用display()方法顯示信息。運行結果如下所示:



    類型:噴墨打印機
    廠商:惠普
    價格:600.0
    打印色彩:6色真彩
    打印紙張大小:A4紙
    惠普打印機正在打印'青軟實訓'文件
    -----------------
    類型:iPhone 6
    廠商:蘋果
    價格:5288.0
    屏幕:4.7英寸
    cpu:雙核
    蘋果手機正在發送'青軟實訓'信息
    public void printInfo(String msg){//打印機打印msg信息
    System.out.println(this.getManufacture() "打印機正在打印'" msg "'文件");





    通過上述繫列代碼,能夠發現繼承減少了代碼的冗餘,使得維護、更新代碼更加容易。例如,臨時需要給Printer和Mobile類都添加“入庫時間”,則隻需在Product類中添加一個“入庫時間”屬性即可,無須在兩個子類中分別添加,通過繼承,Printer和Mobile類就會擁有該屬性。

    視頻講解
    5.2.2多態Java引用變量有兩個類型: 一個是編譯時類型,另一個是運行時類型。編譯時類型由聲明該變量所使用的類型決定; 運行時類型則由實際賦給該變量的對像決定。如果編譯時類型與運行時類型不一致,則稱為“多態”。多態通常體現在具有繼承關繫的類之間,一個父類具有多個子類,可以將子類對像直接賦值給一個父類引用變量,無須任何類型轉換,如圖53所示。

    圖53多態

    子類重寫父類的方法也是Java多態性的一種體現。當子類繼承父類時,如果父類的方法無法滿足子類的需求,子類可以對父類中的方法進行改造,這種情況稱為“方法的重寫”(override)。下述代碼演示方法的重寫。
    【代碼57】OverrideDemo.java



    package com.qst.chapter05;
    //父類
    class Base {
    public void print() {
    System.out.println("父類...");
    }
    }


    //子類
    class Son extends Base {
    //重寫父類的print()方法
    public void print() {
    System.out.println("子類...");
    }
    }


    public class OverrideDemo {


    public static void main(String[] args) {
    //多態
    Base obj = new Son();
    obj.print();
    }
    }



    上述代碼中,子類Son重寫了父類Base的print()方法; 在OverrideDemo類的main()方法中,使用父類引用構造了Son的實例對像,並調用print()方法輸出信息。運行結果如下所示: 



    子類...



    從執行結果可以看到,由於重寫了父類Base的print()方法,所以在調用Son實例的print()方法時使用的是其重寫後的方法。方法重寫需要遵循以下幾點: ●方法名以及參數列表必須完全相同。●子類方法的返回值類型與父類保持一致,或是父類方法返回值類型的子類。●子類方法聲明的異常與父類保持一致,或是父類方法聲明的異常的子類。●父類中的私有方法不能被子類重寫,如果在子類中定義了與父類重名的私有方法,則該方法隻是子類的一個新方法,與父類中的私有方法無關。●子類方法的可訪問性必須與父類方法的可訪問性保持一致,或是更加公開。例如,父類方法可訪問性為protected,則子類方法可以為public、protected,但不能為private和默認值。●不能重寫靜態方法。在Java中,父類引用可以指向子類的對像,這種機制也符合客觀世界的實際情況,子類對像是父類對像的一個特殊情況,例如一個“學生對像”一定是一個“人對像”,因此父類對像的引用(人對像)可以指向(表示)子類對像(學生對像)。這可以解決在運行期對重寫方法的調用,繫統會動態地根據當前被引用對像的類型來決定執行哪個方法,而不是由引用變量的類型來決定。因此,如果父類包含一個被子類重寫的方法,則通過父類引用不同子類對像類型時,就會執行該重寫方法的不同版本,這也是接口規範得以應用的主要原因。下述代碼在原來OverrideDemo代碼的基礎上添加一個Son1類,並對main()方法加以修改。
    【代碼58】OverrideDemo.java



    package com.qst.chapter05;
    //父類
    class Base {
    public void print() {
    System.out.println("父類...");
    }
    }
    //子類
    class Son extends Base {
    //重寫父類的print()方法
    public void print() {
    System.out.println("子類...");
    }
    }


    class Son2 extends Base {
    public void print() {
    System.out.println("子類2...");
    }
    }


    public class OverrideDemo {


    public static void main(String[] args) {
    //多態
    //obj指向自己
    Base obj=new Base();
    obj.print();
    //obj指向子類Son對像
    obj = new Son();
    obj.print();
    //obj指向子類Son2對像
    obj= new Son2();
    obj.print();
    }
    }



    運行結果如下所示: 



    父類...
    子類...
    子類2...



    上述代碼在調用print()方法的過程中,JVM能夠調用正確的實例對像所對應的方法。在編譯期,編譯器無從得知print(),而在運行時則能夠根據對像的類型綁定具體的方法,這稱為動態綁定,這種動態綁定體現了Java的多態應用。

    視頻講解

    5.2.3super關鍵字super關鍵字代表父類對像,其主要用途如下: ●在子類的構造方法中調用父類的構造方法; ●在子類方法中訪問父類的屬性或方法。1. 調用父類構造方法在Java中,父類和子類屬性的初始化過程是各自完成的,雖然構造方法不能夠繼承,但通過使用super關鍵字,在子類構造方法中可以調用父類的構造方法,以便完成父類的初始化工作。子類中利用super調用父類構造方法時,該super語句必須是子類構造方法的條非注釋語句。
    以Product、Printer和Mobile類為例,修改Printer和Mobile這兩個子類的構造方法,直接使用super()初始化父類中的屬性值,代碼如下所示。
    【代碼59】Printer.java



    public class Printer extends Product {
    private String color;
    private String paperSize;


    public Printer() {


    }


    public Printer(String type, String manufacture, double price, String color,
    String paperSize) {
    ////給父類中的基礎屬性賦值
    //this.setType(type);
    //this.setManufacture(manufacture);
    //this.setPrice(price);
    //調用父類的構造方法初始化父類中的基礎屬性,必須是條非注釋語句
    super(type,manufacture,price);
    //給子類自己的屬性賦值
    this.color = color;
    this.paperSize = paperSize;
    }
    ...
    }



    【代碼510】Product.java



    package com.qst.chapter05;


    public class Mobile extends Product {
    private String screenSize;
    private String cpu;


    public Mobile() {


    }


    public Mobile(String type, String manufacture, double price,
    String screenSize, String cpu) {
    //this.setType(type);
    //this.setManufacture(manufacture);
    //this.setPrice(price);
    //調用父類的構造方法初始化父類中的基礎屬性,必須是條非注釋語句
    super(type,manufacture,price);
    this.screenSize = screenSize;
    this.cpu = cpu;
    }
    ...
    }



    在上述代碼的Printer和Mobile兩個類的構造方法中,原來都是使用三行賦值語句給父類中的基礎屬性進行初始化,現都修改成直接調用super(type,manufacture,price)構造方法進行初始化,簡化了代碼。若在子類的構造方法沒有明確寫明調用父類構造方法,則繫統會自動調用父類不帶參數的構造方法,即執行super()方法。現對Product類進行修改,去掉Product類的默認構造方法,代碼如下所示。
    【代碼511】Product.java



    package com.qst.chapter05;


    //父類,商品類
    public class Product {
    private String type;
    private String manufacture;
    private double price;
    //注釋去掉默認構造方法,子類Printer和Mobile將產生錯誤
    //public Product() {
    //
    //}


    public Product(String type, String manufacture, double price) {
    this.type = type;
    this.manufacture = manufacture;







    this.price = price;
    }
    ...
    }



    修改後的Product類沒有無參數的默認構造方法,但在子類Printer和Mobile的默認構造方法中會自動調用super(),而父類Product沒有提供不帶參數的構造方法,因此會產生錯誤,編譯失敗。注意為了便於將來程序的擴展,Java中的類通常都需要提供一個不帶參數的默認構造方法。
    2. 訪問父類的屬性和方法當子類的屬性與父類的屬性同名時,可以使用“super.屬性名”來引用父類的屬性。當子類重寫了父類的方法時,可以使用“super.方法名()”的方式來訪問父類的方法。下述代碼修改Product類,增加一個display()方法; 然後在Printer和Mobile兩個類中重寫display()方法,並通過“super.display()”調用父類的輸出方法。代碼分別如下所示。
    【代碼512】Product.java



    package com.qst.chapter05;


    //父類,商品類
    public class Product {
    private String type;
    private String manufacture;
    private double price;


    public Product() {


    }


    public Product(String type, String manufacture, double price) {
    this.type = type;
    this.manufacture = manufacture;
    this.price = price;
    }


    public String getType() {
    return type;
    }


    public void setType(String type) {
    this.type = type;







     
    網友評論  我們期待著您對此商品發表評論
     
    相關商品
    在線留言 商品價格為新臺幣
    關於我們 送貨時間 安全付款 會員登入 加入會員 我的帳戶 網站聯盟
    DVD 連續劇 Copyright © 2024, Digital 了得網 Co., Ltd.
    返回頂部