Java程序語言及設(shè)計第3章.ppt
《Java程序語言及設(shè)計第3章.ppt》由會員分享,可在線閱讀,更多相關(guān)《Java程序語言及設(shè)計第3章.ppt(155頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1 Java語言程序設(shè)計 2 第三章面向?qū)ο筇卣?基本概念類的定義對象類的繼承和多態(tài)接口和包常用工具類 3 3 1基本概念 什么是編程語言 人和計算機(jī)進(jìn)行交流的工具和手段編程語言的發(fā)展機(jī)器語言 0101001匯編語言 mov push add call第三代語言 高級語言 以C語言為代表 過程式編程語言 ProceduralProgrammingLanguage 第四代語言 非過程化 面向?qū)ο蟮木幊陶Z言語言的發(fā)展 抽象的過程 4 面向?qū)ο?ObjectOriented OO 面向?qū)ο缶幊?ObjectOrientedProgramming OOP 面向?qū)ο笫且环N軟件開發(fā)的方法 面向?qū)ο蟮姆治雠c設(shè)計 OOA OOD 研究生課程 第一個面向?qū)ο蟮恼Z言 Simula 67第一個成功的面向?qū)ο缶幊陶Z言 SmalltalkC JAVA C PERL等用客觀世界中描述事物的方法來描述程序中要解決的問題萬事萬物都是對象程序便是成堆的對象 彼此通過消息的傳遞 請求其他對象進(jìn)行工作 3 1基本概念 5 五個基本概念對象類封裝性繼承性多態(tài)性 3 1基本概念 6 對象 object everythingisanobject現(xiàn)實世界的對象 桌子 書 自行車 電視 狗 文件 表格 按鈕 窗口對象包含兩個特性狀態(tài) 指對象本身的信息 內(nèi)部信息 內(nèi)部變量 行為 實現(xiàn)對信息的訪問 對象的操作標(biāo)志 代表對象的標(biāo)識符山地車的狀態(tài) 兩個車輪 一些齒輪 速度 擋數(shù) 行為 剎車 加速 減速和換擋 書包含很多信息 擁有訪問所包含信息的方法 一頁一頁的看 通過目錄找到感興趣的內(nèi)容 3 1基本概念 7 對象 object 狀態(tài) 變量 variables 行為 方法 method 對象就是變量和相關(guān)方法的軟件集合一個對象可以由其他對象組合而成 窗口 按鈕 菜單條 文本框 狀態(tài)欄等 程序就是對象的集合 對象之間相互交互和通信完成任務(wù) 3 1基本概念 8 類 class 亞里士多德 theclassoffishesandtheclassofbirds現(xiàn)實世界中 存在很多同類的對象 很多桌子 書 自行車一種原型 一種抽象 一種共性 一個模板Everyobjecthasatype實例 instance 某類對象的一個特定實體 類是對象的一個抽象表格 類 填入不同的個人信息 不同的對象 3 1基本概念 9 封裝性對象本身的數(shù)據(jù)得到保護(hù) 隱藏其他對象僅僅需要知道對該對象的訪問方法 接口 interface 即可好處模塊化 每個對象的源文件可以是相互獨(dú)立的 可以被不同的程序調(diào)用 每個對象是一塊積木 可以搭建不同的形狀信息隱藏 通常定義一個公共接口 方法實現(xiàn)對對象的訪問 可以調(diào)整對象的私有信息和方法 而不會對其他調(diào)用它的對象產(chǎn)生影響可重用性黑盒子電腦的DIY噴墨打印機(jī) 硒鼓壞 彩色硒鼓 3 1基本概念 10 繼承性為什么會有繼承 建立一個類后 發(fā)現(xiàn)另一個新的類有相同的特性 兩個選擇 重新定義一個新的類 在已有類的基礎(chǔ)上 修改 加加 減減 父類和子類 子類繼承 擁有 父類所有的數(shù)據(jù)和方法 同時子類可以有新的數(shù)據(jù)和方法 青出于藍(lán) 而勝于藍(lán) 樹型結(jié)構(gòu) 層次化結(jié)構(gòu) 根 基類 3 1基本概念 11 繼承性 運(yùn)輸工具 航空運(yùn)輸工具 陸地運(yùn)輸工具 水上運(yùn)輸工具 人力驅(qū)動 引擎驅(qū)動 二輪 四輪 客運(yùn) 貨運(yùn) 3 1基本概念 12 繼承性多重繼承 類A 類B 類C 類D 類F 類G 一個類擁有多個父類 產(chǎn)生二義性 例類C和類D都有一個同名的方法 類G Java中僅僅支持單一繼承 同時Java采用Interface 接口 實現(xiàn)多重繼承而避免父類二義性 3 1基本概念 13 多態(tài)性表現(xiàn)在繼承中 方法的重寫子類從父類繼承 extends擴(kuò)展 而來多個子類同屬一個父類 所有子類有相同的父類繼承父類的方法在不同的子類中有不同的表現(xiàn)形式表現(xiàn)在用一個類中 方法的重載 3 1基本概念 14 多態(tài)性多態(tài)性在繼承中的表現(xiàn) 3 1基本概念 15 多態(tài)性 classSquareextendsShape voiddraw System out println Square draw voiderase System out println Square erase classTriangleextendsShape voiddraw System out println Triangle draw voiderase System out println Triangle erase classShape voiddraw voiderase classCircleextendsShape voiddraw System out println Circle draw voiderase System out println Circle erase 3 1基本概念 16 多態(tài)性 publicclassTest publicstaticShaperandShape switch int Math random 3 default case0 returnnewCircle case1 returnnewSquare case2 returnnewTriangle publicstaticvoidmain String args Shape s newShape 9 for inti 0 i s length i s i randShape for inti 0 i s length i s i draw Circle draw Triangle draw Circle draw Circle draw Circle draw Square draw Triangle draw Square draw Square draw 3 1基本概念 17 第三章面向?qū)ο筇卣?基本概念類的定義對象類的繼承和多態(tài)接口和包常用工具類 18 程序是對象的集合 而對象是類的實例化源程序就是一個個的Java類Java本身提供的類 核心API 見Java文檔中描述程序員可以對其進(jìn)行調(diào)用j2sdk1 4 1 01 jre lib rt jar 22 4MB 程序員自己定義的類 3 2類的定義 19 3 2 1類的定義格式 類的修飾符 class類名 extends父類名 implements 接口名 類型成員變量1 類型成員變量2 類型成員方法1 參數(shù)1 參數(shù)2 方法體 類型成員方法2 參數(shù)1 參數(shù)2 方法體 3 2類的定義 20 類的定義格式 類的修飾符 class類名 extends父類名 implements接口名 類的修飾符public 公共類 可以被其他類所使用 declaresthattheclasscanbeusedbyanyclassregardlessofitspackage 無任何限制 無修飾 默認(rèn)說明 aclasscanbeusedonlybyotherclassesinthesamepackage 僅僅能在同一個包中的其他類引用 abstract declaresthattheclasscannotbeinstantiated 宣布該類不能被實例化 final declaresthattheclasscannotbesubclassed 宣布該類不能有子類 3 2類的定義 21 類的修飾符final Declaresthattheclasscannotbesubclassed 宣布該類不能有子類 3 2類的定義 finalclassChessAlgorithm classBetterChessAlgorithmextendsChessAlgorithm Can tsubclassfinalclasses classChessAlgorithmclassBetterChessAlgorithmextendsChessAlgorithm 1error 22 類的定義格式 類的修飾符 class類名 extends父類名 implements接口名 extends 繼承的關(guān)系implements 實現(xiàn)哪些接口 interface 的方法 實現(xiàn)多重繼承publicclassTestextendsFrameimplementsActionListener ItemListener 3 2類的定義 23 一個簡單的類classStudent Stringname stuNumber doublescore1 score2 score3 voidset1 Strings1 Strings2 name s1 stuNumber s2 System out println name stuNumber doublesetScore doubled1 doubled2 doubled3 doubled score1 d1 score2 d2 score3 d3 d d1 d2 d3 returnd 3 2類的定義 24 包 Package 的概念packageorg jalpha classtest 源文件位置 D src org jalpha test java 編譯方法1 cdD src org jalpha javactest java 編譯方法2 cdD src javacorg jalpha test java class文件位置 D src org jalpha test class 運(yùn)行 cdD src javaorg jalpha test 3 2類的定義 25 包 package 的概念通過包來管理類名空間防止同名類名的沖突層次化的結(jié)構(gòu) 3 2類的定義 對個體 個人和機(jī)構(gòu) 將類文件放在不同的目錄下防止重名org jalpha method1 javamethod2 java ABC公司Engine java XYZ公司Engine java 需調(diào)用Engine java ABC公司com abc Engine java XYZ公司com xyz Engine java 26 包 package 的概念packageorg jalpha classtest 3 2類的定義 D src org jalpha test javaD src org jalpha test1 javaD src org jalpha test2 java 27 對象具有狀態(tài)和行為成員變量定義 訪問權(quán)限修飾符 類型變量名 訪問權(quán)限修飾符 類型變量名 初值 訪問權(quán)限修飾符 類型變量名 初值 變量名 初值 成員方法定義 訪問權(quán)限修飾符 方法返回類型方法名 throws異常名 方法體 類型 基本類型 復(fù)合類型 數(shù)組 類和接口 3 2 2類成員 變量和方法 28 訪問控制修飾符公共訪問控制符 public被所有類訪問默認(rèn)訪問控制符被同一包中其他類訪問私有訪問控制符 private被該類自身訪問保護(hù)訪問控制符 protected該類自身 同一個包中的其他類 其他包中的子類訪問私有保護(hù)訪問控制符 privateprotected該類自身 所有子類訪問 類成員變量的訪問 29 非訪問控制修符靜態(tài)變量static屬于類的變量最終變量final值在程序的執(zhí)行過程中不會改變易失變量volatile可能同時被多個線程所控制和修改 類成員變量的訪問 30 public 公共變量 公共方法 容許全權(quán)訪問 無任何限制 先構(gòu)造對象 再訪問 類成員的訪問 classA publicintx publicvoidprint classB voidtest Aa newA a x 100 a print packageabc classA publicintx publicvoidprint packagexyz importabc A classB voidtest Aa newA a x 100 a print 直接訪問公有變量x和公共方法print 31 private 私有變量 私有方法 僅能在其所定義的類中被訪問 先構(gòu)造對象 再訪問 D javacA javaxhasprivateaccessinAa x 100 print hasprivateaccessinAa print 2errors 類成員的訪問 classA privateintx privatevoidprint classB voidtest Aa newA a x 100 a print 32 protected 保護(hù)變量 保護(hù)方法 容許類本身 子類 有一定限制 以及同一個包中所有類訪問 先構(gòu)造對象 再訪問 類成員的訪問 classA protectedintx protectedvoidprint classB voidtest Aa newA a x 100 a print packageabc classA protectedintx protectedvoidprint packagexyz importabc A classBextendsA voidtest Aa Bb a x 100 a print b x 100 b print illegal illegal legal legal 33 無修飾 友好變量 友好方法 容許類本身以及同一個包中所有類訪問 類成員的訪問 classA intx voidprint classB voidtest Aa newA a x 100 a print packageabc classA intx voidprint packageabc classB voidtest Aa newA a x 100 a print 34 小結(jié) 指子類與父類不在同一個包中的情況 類成員變量的訪問 35 static 靜態(tài)變量 靜態(tài)方法 類的變量 方法 獨(dú)立于類的對象 可以直接根據(jù)類名調(diào)用classS staticintA 12 B 34 staticvoidprint classTest publicstaticvoidmain Stringargs System out println A S A B S B S print 類成員變量 36 static 靜態(tài)變量 靜態(tài)方法 classTest publicvoidprint intx System out println x publicstaticvoidmain Stringargs intx 3 print x D javacTest javaTest java 9 non staticmethodprint int cannotbereferencedfromastaticcontextprint x 1error classTest publicvoidprint intx System out println x publicstaticvoidmain Stringargs intx 3 Testt newTest t print x classTest publicstaticvoidprint intx System out println x publicstaticvoidmain Stringargs intx 3 print x static方法中僅僅可以調(diào)用其他static方法 類成員 37 final變量 方法final變量 定義一個常數(shù) 即變量值不能改變finaldoubleAVOGADRO 6 022e23 final類 不能有子類final方法 方法不能被重寫 overriding classChessAlgorithm finalvoidnextMove ChessPiecepieceMoved BoardLocationnewLocation 類成員 變量 38 小結(jié)類 public abstract final 無修飾 private 類成員publicprotectedprivate無修飾staticfinal 類成員 變量 39 方法 對象行為的描述完成某種功能的程序塊定義 訪問權(quán)限修飾符 方法返回類型方法名 throws異常名 方法體 方法參數(shù)的傳遞變量的作用域方法的重載 overloading 重寫 overriding 方法的遞歸調(diào)用 類成員 方法 40 訪問控制修飾符公共訪問控制符 public被所有類訪問默認(rèn)訪問控制符被同一包中其他類訪問私有訪問控制符 private被該類自身訪問保護(hù)訪問控制符 protected該類自身 同一個包中的其他類 其他包中的子類訪問私有保護(hù)訪問控制符 privateprotected該類自身 所有子類訪問 類成員 方法的訪問 41 非訪問控制修符靜態(tài)方法static屬于類的方法最終方法final不能被子類重新定義的方法抽象方法abstract只有方法說明 沒有具體實現(xiàn)本地方法native以其他語言實現(xiàn)方法功能同步方法synchronized用于多線程程序中的協(xié)調(diào)和同步 類成員 方法的訪問 42 例 成員 方法 classTest publicstaticvoidmain Stringargs doubled product AreamyArea myArea newArea d product myArea product System out println myArea的面積是 d product classArea doublewidth height voidsetV doublew doubleh width w height h doubleproduct returnwidth height 43 方法參數(shù) 成員 方法 形參和實參 D javaParameter343423 注意1 類型匹配注意2 基本類型與復(fù)合類型參數(shù)傳遞的結(jié)果不同 PassbyValueInJavamethods argumentsarepassedbyvalue Wheninvoked themethodreceivesthevalueofthevariablepassedin Whentheargumentisofprimitivetype pass by valuemeansthatthemethodcannotchangeitsvalue Whentheargumentisofreferencetype pass by valuemeansthatthemethodcannotchangetheobjectreference butcaninvoketheobject smethodsandmodifytheaccessiblevariableswithintheobject 44 例 成員 方法 u 3 v 2 u 5 v 10 輸出結(jié)果 3451112131415 45 變量的作用域 成員變量 局部變量 成員 方法 46 方法的重載 overload 方法名相同 但方法的參數(shù)不同方法描述方法名 標(biāo)識符 參數(shù)類型方法返回值絕對值abs a intint絕對值abs a longlong絕對值abs a floatfloat絕對值abs a doubledouble publicstaticintabs inta publicstaticlongabs longa publicstaticfloatabs floata publicstaticdoubleabs doublea 成員 方法 47 方法的重載 overload publicclassExam3 5 publicstaticvoidmain Stringargs inti1 3 i2 5 charc1 a c2 b floatf1 3 1f f2 4 1f doubled1 2 5 d2 3 8 System out println add i1 i2 System out println add c1 i1 System out println add i1 f1 System out println add f1 d2 System out println add d1 i2 staticintadd inti intj returni j staticdoubleadd doublei doublej returni j 成員 方法 48 方法的重寫 overriding 子類重寫父類的方法 成員 方法 classFather voiddisplay classSonextendsFather voiddisplay Fatherf newFather f display Sons newSon s display 49 構(gòu)造方法 創(chuàng)建對象 實例化對象 new例1 Applea newApple 創(chuàng)建對象 例2 Applea 對象的說明 a newApple 實例化對象 對象的實例化通過構(gòu)造方法 constructor 來實現(xiàn)構(gòu)造方法的名字與類名相同構(gòu)造方法沒有返回值構(gòu)造方法可以有多個 構(gòu)成方法的重載 overload 50 例 對象的實例化和初始化 輸出結(jié)果 2020501020 構(gòu)造方法 51 再談方法的重載 overload 構(gòu)造方法 classTree intheight Tree prt Plantingaseeding height 0 Tree inti prt CreatingnewTreethatis i feettall height i voidinfo prt Treeis height feetheight voidinfo Strings prt s Treeis height feetheight staticvoidprt Strings System out println s for inti 0 i 5 i Treet newTree i t info t info mytree newTree 52 默認(rèn)構(gòu)造方法例classApple intcolor Applea newApple 對象實例的判斷 null例Applea if a null System out println Daydream 構(gòu)造方法 運(yùn)行時系統(tǒng)自動賦予一個空構(gòu)造函數(shù)如Apple 53 再談構(gòu)造方法 構(gòu)造方法 classCmethod Cmethod booleanb publicstaticvoidmain Stringargs Cmethodc1 newCmethod Cmethodc2 newCmethod false classCmethod Cmethod booleanb publicstaticvoidmain Stringargs Cmethodc1 newCmethod Cmethodc2 newCmethod false classCmethod Cmethod booleanb Cmethod publicstaticvoidmain Stringargs Cmethodc1 newCmethod Cmethodc2 newCmethod false 運(yùn)行時系統(tǒng)自動賦予一個空構(gòu)造方法 僅僅當(dāng)該類沒定義構(gòu)造方法的情況下 54 static變量的初始化 classSmember staticinti 100 staticbooleanb true charc t publicSmember publicstaticvoidmain Stringargs Smemberm1 newSmember Smemberm2 newSmember 不論產(chǎn)生多少個對象 屬于類的靜態(tài)變量只有一份 即只占有一份存儲空間 classSmember staticinti staticbooleanb static i 100 b true System out println Instaticblock charc t publicSmember System out println Inconstructor publicstaticvoidmain Stringargs Smemberm1 newSmember Smemberm2 newSmember 輸出結(jié)果InstaticblockInconstructorInconstructor 55 3 2 6抽象類 abstractclass 一個未完成的類僅僅抽象類可以包含抽象方法 abstractmethods 抽象方法 僅僅申明了方法 但未實現(xiàn)有訪問修飾詞返回值類型方法名參數(shù)列表無方法體 56 3 2 6抽象類 abstractclass abstractclassPoint intx 1 y 1 voidmove intdx intdy x dx y dy alert abstractvoidalert abstractclassColoredPointextendsPoint intcolor classSimplePointextendsPoint voidalert 抽象方法 有訪問修飾詞 返回值類型 方法名和參數(shù)列表 無方法體 57 3 2 6抽象類 abstractclass 抽象類不能被實例化 例Pointp newPoint 子類繼承抽象類時 必須重寫抽象方法 否則仍為抽象類 abstractclassPoint intx 1 y 1 voidmove intdx intdy x dx y dy alert abstractvoidalert abstractclassColoredPointextendsPoint intcolor classSimplePointextendsPoint voidalert Pointp newSimplePoint 58 抽象類 abstractclass 多態(tài)性 abstractclassGraphics abstractvoidparameter abstractvoidarea classRectangleextendsGraphics doubleh w Rectangle doubleu doublev h u w v voidparameter System out println h w voidarea System out println 0 5 h w Rectanglerec newRectangle 5 0 2 0 Circlecir newCircle 3 0 Red Graphics g rec cir for inti 0 i g length i g i parameter g i area classCircleextendsGraphics doubler Stringc Circle doubleu Stringv r u c v voidparameter System out println r c voidarea System out println Math PI r r 運(yùn)行結(jié)果1 02 02 03 0Red28 274333882308138 多態(tài)性 polymorphism 應(yīng)用場合 不同子類可以用不同的方式實現(xiàn)同一共同接口 該共同接口建立了一個基本形式 59 第三章面向?qū)ο筇卣?基本概念類的定義對象類的繼承和多態(tài)接口和包常用工具類 60 3 3對象 引用對象的變量格式 對象名 變量名引用對象的方法格式 對象名 方法名例1Vectorv newVector v addElement helloworld 例2inta 1 2 3 4 5 intsize a length 例3System out println 61 3 3對象 通過對象引用對象的成員變量和成員方法 classQangle inta h Qangle a 10 h 20 Qangle intx inty a x h y Qangle Qangler a r width h r height voidset intx inty a x h y q1 set 30 40 q1 a 30 q1 h 40 目的相同第一方式更安全 更面向?qū)ο?數(shù)據(jù)封裝 直接操縱變量 62 對象的釋放 將對象從內(nèi)存中清除內(nèi)存的管理 枯燥 容易出錯 垃圾回收 GarbageCollection 垃圾搜集器 GarbageCollector 周期性地釋放不再被引用的對象 自動完成手動完成 System gc publicstaticvoidgc Runsthegarbagecollector TheJavaplatformallowsyoutocreateasmanyobjectsasyouwant limited ofcourse bywhatyoursystemcanhandle andyoudon thavetoworryaboutdestroyingthem TheJavaruntimeenvironmentdeletesobjectswhenitdeterminesthattheyarenolongerbeingused Thisprocessiscalledgarbagecollection 63 對象的使用 訪問對象的私有 private 成員通過定義一個公共方法來實現(xiàn) classStudent privateStringname privateStringid Student Strings1 Strings2 name s1 id s2 StringgetName returnname voidsetName Strings name s Studentst newStudent aloha 001 Stringn st getName st setName csma n st getName 64 對象的使用 對象作為方法的參數(shù) 訪問權(quán)限修飾符 方法返回類型方法名 參數(shù) throws異常名 方法體 參數(shù) 類型變量名 類型 基本數(shù)據(jù)類型 復(fù)合類型 對象 參數(shù)的傳遞Passbyvalue 65 例對象用作方法的參數(shù) 對象的使用 66 對象的使用 對象的訪問對象作為方法的返回值 訪問權(quán)限修飾符 方法返回類型方法名 參數(shù) throws異常名 方法體 返回類型有返回值 基本數(shù)據(jù)類型 復(fù)合類型 對象 無返回值 void 67 對象的使用 對象作為方法的返回值例 求兩點(diǎn)坐標(biāo)之間的中點(diǎn)坐標(biāo)思路 x1 y1 和 x2 y2 x y x x1 x2 2 y y1 y2 2Spots1 newSpot 2 3 Spots2 newSpot 4 5 Spots s1 midSpot s2 68 例對象用作方法的返回值 對象的使用 69 對象的使用 數(shù)組 類型相同的一列元素簡單的數(shù)組 publicclassArrayDemo publicstaticvoidmain String args int anArray newint 10 for inti 0 i anArray length i anArray i i System out print anArray i System out println 70 對象的使用 對象數(shù)組 classTest publicstaticvoidmain Stringargs inta newint 5 for inti 0 i a length i System out println a i Strings newString 5 for inti 0 i s length i System out println s i System out println s i length 71 對象的使用 對象數(shù)組 classStudent privateStringname privateStringid Student Strings1 Strings2 name s1 id s2 StringgetName returnname voidsetName Strings name s voiddisplay System out println name id Studentst newStudent 10 for inti 0 i st length i st i newStudent for inti 0 i st length i st i display 72 對象的使用 對象作為另一個對象的成員變量一個對象中包含另一個對象 組合關(guān)系 classStudent privateStringname privateStringid Student Strings1 Strings2 name s1 id s2 StringgetName returnname voidsetName Strings name s 73 對象的使用 對象作為另一個對象的成員變量 classMobilePhone privateStringtype privateWatchw MobilePhone Strings type s voidsetWatch Watcha w a longgetTime returnw getTime classWatch longgetTime returnSystem currentTimeMillis MobilePhonemp newMobilePhone nokia Watchw newWatch mp setWatch w longl mp getTime publicstaticlongcurrentTimeMillis thedifference measuredinmilliseconds betweenthecurrenttimeandmidnight January1 1970UTC 74 對象的使用 關(guān)鍵詞thisthis指當(dāng)前對象應(yīng)用1 加強(qiáng)程序可讀性 this可有可無 75 對象的使用 例1 Demo1 java 調(diào)用變量 classDemo1 doublex y Demo1 doublei doublej this x i this y j doubleave return x y 2 publicstaticvoidmain Stringargs Demo1d newDemo1 3 4 System out println d ave 76 對象的使用 例2 Demo2 java 調(diào)用方法 classDemo2 intx y z Demo2 inta intb x a y b this sort a b voidsort inta intb intt if x y t x x y y t 77 對象的使用 例3 Demo3 java 調(diào)用方法 classDemo3 intx y Demo3 inta intb x a y b voidchange inti intj x i y j this sort voidsort intt if x y t x x y y t 78 對象的使用 關(guān)鍵詞thisthis指當(dāng)前對象應(yīng)用2 對同一個對象執(zhí)行多次方法調(diào)用 classLeaf inti 0 Leafincrement i returnthis voidprint System out println i i Leafx newLeaf x increment increment increment print 79 對象的使用 關(guān)鍵詞thisthis指當(dāng)前對象應(yīng)用3 在一個構(gòu)造函數(shù)中調(diào)用另一個構(gòu)造函數(shù) classFlower Stringname intprice Flower this tulip 10 Flower Strings inti name s price i voidprint System out println name price publicstaticvoidmain Stringargs Flowerf newFlower f print 80 第三章面向?qū)ο筇卣?基本概念類的定義對象類的繼承和多態(tài)接口和包常用工具類 81 3 4類的繼承 父類與子類的關(guān)系 extends 基本內(nèi)容子類可調(diào)用父類的方法和變量 子類可增加父類中沒有的方法和變量子類可重新定義父類的靜態(tài) 實例變量子類可重新定義父類的靜態(tài) 實例方法繼承中的構(gòu)造方法類成員訪問修飾符與繼承的關(guān)系 82 3 4類的繼承 子類可調(diào)用父類的方法和變量子類可增加父類中沒有的方法和變量 classVehicle Stringbrand voidsetB Strings brand s voidshowB System out println brand classBusextendsVehicle intgas voidsetG intg gas g voidshowG System out println gas Busb newBus b setB audi b setG 100 b showB b showG 子類繼承父類的方法和變量 則這些方法和變量就屬于子類 則子類對象對這些方法和變量的調(diào)用是顯而易見的 83 3 4類的繼承 子類可重新定義父類中已有的變量父類中同名的變量無效 隱藏 通過 super 變量名 和父類名 變量名 static變量 引用 classA inti 256 j 64 staticintk 32 finalfloate 2 718f classBextendsA publiccharj x finaldoublek 5 staticinte 321 voidshow System out println i j k e voidshowA System out println super j A k super e Bb newB b show b showA 256x5 032164322 718 this 變量名this 方法名this super 變量名super 方法名super super 當(dāng)前對象 當(dāng)前對象的父對象 其他 84 繼承中的super對象 3 4類的繼承 父類 子類 調(diào)用父類的變量和方法 調(diào)用子類的變量和方法 85 繼承中的構(gòu)造方法 3 4類的繼承 publicclassCartoonextendsDrawing Cartoon System out println CartoonConstructor publicstaticvoidmain Stringargs Cartoonc newCartoon classArt Art System out println ArtConstructor classDrawingextendsArt Drawing System out println DrawingConstructor ArtConstructorDrawingConstructorCartoonConstructor 子類的構(gòu)造方法必須調(diào)用父類的構(gòu)造方法 classDrawingextendsArt Drawing System out println DrawingConstructor ArtConstructorCartoonConstructor publicclassCartoonextendsDrawing Cartoon super System out println CartoonConstructor publicstaticvoidmain Stringargs Cartoonc newCartoon 86 再談繼承中的構(gòu)造方法 類的繼承 publicclassChessextendsBoardGame Chess super 3 System out println CartoonConstructor publicstaticvoidmain Stringargs Chessc newChess classGame Game inti System out println GameConstructor classBoardGameextendsGame BoardGame inti super i System out println BoardGameConstructor 子類的構(gòu)造方法必須要對父類的構(gòu)造方法進(jìn)行調(diào)用 不管以任何形式 否則編譯出錯 87 再談繼承中的構(gòu)造方法 3 4類的繼承 classA A inti classBextendsA B Strings B Strings super 88 3 4類的繼承 子類可重新定義父類中已有的靜態(tài)變量 static classPoint staticintx 2 classTPointextendsPoint staticdoublex 4 7 publicstaticvoidmain String args newTPoint printX voidprintX System out println x Point x 4 72 89 3 4類的繼承 子類可重新定義父類中已有的實例變量 classPoint intx 2 classTPointextendsPoint doublex 4 7 voidprintBoth System out println x super x publicstaticvoidmain String args TPointt newTPoint t printBoth System out println t x Point t x 4 724 72 90 類的繼承 再談子類對父類變量的繼承 importpoints Point3d classPoint4dextendsPoint3d intw publicvoidmove intdx intdy intdz intdw x dx y dy z dz w dw packagepoints publicclassPoint intx y publicvoidmove intdx intdy x dx y dy packagepoints publicclassPoint3dextendsPoint intz publicvoidmove intdx intdy intdz x dx y dy z dz 目錄結(jié)構(gòu) points Point class points Point3d class Point4d class importpoints Point3d classPoint4dextendsPoint3d intw publicvoidmove intdx intdy intdz intdw super move dx dy dz w dw 編譯時報錯 x y z僅在本包中才能訪問 繼承與類成員的訪問修飾符有關(guān) 91 類的繼承 類成員訪問修飾符與繼承的關(guān)系 classPoint intx y privatePoint reset Point intx inty this x x this y y privatevoidreset this x 0 this y 0 classColoredPointextendsPoint intcolor voidclear reset classTest publicstaticvoidmain String args ColoredPointc newColoredPoint 0 0 c reset AnerroroccursbecauseColoredPointhasnoconstructordeclaredwithtwointegerparameters asrequestedbytheuseinmain ThisillustratesthefactthatColoredPointdoesnotinherittheconstructorsofitssuperclassPoint AnothererroroccursbecauseColoredPointdeclaresnoconstructors andthereforeadefaultconstructorforitisautomaticallycreated andthisdefaultconstructorisequivalentto ColoredPoint super whichinvokestheconstructor withnoarguments forthedirectsuperclassoftheclassColoredPoint TheerroristhattheconstructorforPointthattakesnoargumentsisprivate andthereforeisnotaccessibleoutsidetheclassPoint TwomoreerrorsoccurbecausethemethodresetofclassPointisprivate andthereforeisnotinheritedbyclassColoredPoint 92 類的繼承 類成員訪問修飾符與繼承的關(guān)系私有的 private 類成員不能被子類繼承公共的 public 和保護(hù)性的 protected 類成員能被子類繼承 且子類和父類可以屬于不同的包無修飾的父類成員 僅在本包中才能被子類繼承構(gòu)造函數(shù)不是類成員 所以不被繼承 packagepoints publicclassPoint publicintx y protectedintuseCount 0 staticprotectedinttotalUseCount 0 publicvoidmove intdx intdy x dx y dy useCount totalUseCount importpoints Point classTestextendsPoint publicvoidmoveBack intdx intdy x dx y dy useCount totalUseCount 93 類的繼承 例 classPosition intx y Position intpx intpy x px y py voidshow System out println x y classSpotextendsPosition booleandisplay Spot intsx intsy booleansf super sx sy display sf voidchange intcx intcy x cx y cy classBoxextendsSpot intr Box intbx intby intbr booleanbf super bx by bf r br voidadd intda r da voidred intda r da voidshow System out print 起點(diǎn) super show System out print 邊長 r if display System out println 顯示 elseSystem out println 不顯示 Spots newSpot 100 100 false s show Boxb newBox 100 100 30 true b show b change 200 300 b add 50 b show 94 繼承中類對象作為參數(shù)傳遞 類的繼承 classSide voiddisplay System out println 平面 classSpotextendsSide privateintx y Spot intu intv x u y v voiddisplay System out println x y classLineextendsSide privateintx1 y1 x2 y2 Line inta1 intb1 inta2 intb2 x1 a1 y1 b1 x2 a2 y2 b2 voiddisplay System out println x1 y1 System out println x2 y2 Spots newSpot 2 3 Linel newLine 1 2 3 4 display s display l- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- Java 程序語言 設(shè)計
鏈接地址:http://www.hcyjhs8.com/p-6362401.html