




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
ObjectorientedadvancedJava特殊關(guān)鍵學(xué)習(xí)及面向?qū)ο笤磉M階2目標掌握類的靜態(tài)成員:static掌握繼承的概念和用法:extends掌握抽象類的定義和用法:abstract掌握final關(guān)鍵字用法掌握接口的定義和用法:interface,implements多態(tài)例如了解包的使用:package3類的靜態(tài)成員類中的靜態(tài)變量、靜態(tài)方法或靜態(tài)代碼塊屬于類,而不屬于某個特定的對象。類的靜態(tài)成員可以與類的名稱一起使用,而無需創(chuàng)立類的對象。靜態(tài)變量或方法也稱為類的變量或方法。用static修飾符修飾,可以是變量、方法或代碼塊4靜態(tài)變量不管創(chuàng)立了類的多少實例,整個類中靜態(tài)變量的副本只有一個。引用靜態(tài)變量的方法:通過引用類的任一實例通過類的名稱〔建議〕classA{staticintx=0;
A(){x++;}}Aa1=newA();Aa2=newA();a1.x=100;a2.x=200;inty=a1.x;
通過類實例訪問不是一個好方法Aa1=newA();Aa2=newA();A.x=100;A.x=200;inty=A.x;
聲明為static的變量實質(zhì)上就是全局變量通過類名訪問5靜態(tài)方法與靜態(tài)方法相關(guān)的幾個要點:類的靜態(tài)方法只能訪問其他的靜態(tài)成員靜態(tài)方法沒有this靜態(tài)方法不能被覆蓋(重寫)為非靜態(tài)方法classA{staticinti=10;intj;
staticvoidsetValue(intx){
j=x;//出錯
System.out.println(""+i);}}不能訪問非靜態(tài)變量j,可以訪問靜態(tài)變量iclassB{staticvoidtest(){}}classCextendsB{
voidtest(){}//出錯}
6靜態(tài)塊如果需要通過計算來初始化靜態(tài)變量,可以聲明一個靜態(tài)塊。靜態(tài)塊僅在該類被加載時執(zhí)行一次。只能初始化類的靜態(tài)數(shù)據(jù)成員。
classA{
staticintx;//靜態(tài)成員
inty;//非靜態(tài)成員
static{
x=1; y=1; System.out.println("staticblock:"+x);}}
7被繼承的類稱為父類繼承父類的類稱為子類執(zhí)行繼承時,子類將獲得父類的屬性,并具有自身特有的屬性。
Emoloyee類:namesexWorker類:categorydressAllowanceOfficer類:empClassvehicle職員類,具有姓名和性別兩個屬性工人類,繼承了父類的姓名和性別屬性外還包含類別和是否有服裝津貼屬性主任類,還包含級別和是否配備交通工具屬性繼承繼承是面向?qū)ο缶幊碳夹g(shù)的一塊基石,它允許創(chuàng)立分等級層次的類。運用繼承,可以創(chuàng)立一個通用類定義一系列一般特性。該類可以被更具體的類繼承。8extends關(guān)鍵字extends關(guān)鍵字用于繼承類。聲明一個繼承父類的類的通常形式如下:classsubclass-nameextendssuperclass-name{//類體}
沒有extends,默認父類為Object只能有一個父類,即單繼承子類繼承父類的public和protected成員注意9super關(guān)鍵字super關(guān)鍵字用來解決如何直接訪問或初始化從父類繼承來的屬性。super有兩種通用形式:調(diào)用父類的構(gòu)造函數(shù),將構(gòu)造細節(jié)通過繼承鏈往上傳遞。注意:
super()(或其重載的構(gòu)造函數(shù))必須是在子類構(gòu)造函數(shù)中的第一個執(zhí)行語句。訪問被子類成員覆蓋(重寫)的父類成員(成員變量和成員方法)。10繼承例如classEmployee{
Stringname;//姓名
charsex;//性別
Employee(Stringn,chars){name=n;sex=s;}publicStringgetName(){returnname;}publicchargetSex(){returnsex;}}classWorkerextendsEmployee
{
charcategory;//類別
booleandressAllowance;//是否提供服裝津貼Worker(Stringn,chars,charc,booleand){
super(n,s);
category=c;dressAllowance=d;}publicchargetCategory(){returncategory;}
publicbooleangetAll(){returndressAllowance;}}classInheDemo{publicstaticvoidmain(Stringargs[]){Workerw=newWorker("M.John",'M','B',true);
System.out.println("工人信息");
System.out.println("姓名
:"+w.getName());System.out.println("性別
:"+w.getSex());
System.out.println("類別
:"+w.getCategory());if(w.getAll())System.out.println("提供服裝津貼");
elseSystem.out.println(“未提供服裝津貼”);}}11方法覆蓋〔override〕方法覆蓋是Java實現(xiàn)多態(tài)性機制的另一種方式。在類層次結(jié)構(gòu)中,如果子類中的一個方法與父類中的方法有相同的方法名并具有相同數(shù)量和類型的參數(shù)列表,這種情況稱為方法覆蓋〔重寫〕。當(dāng)一個覆蓋方法通過父類引用被調(diào)用,Java根據(jù)當(dāng)前被引用對象的類型來決定執(zhí)行哪個版本的方法。可以通過super關(guān)鍵字調(diào)用直屬父類中被覆蓋的方法版本。12方法覆蓋例如classSuperClass{inta;SuperClass(){a=10;}
publicvoidprintA(){System.out.println("父類中a="+a);}}classSubClassextendsSuperClass{inta;SubClass(inta){this.a=a;}
publicvoidprintA(){System.out.println("子類中a="+a);}}
publicclassOverrideDemo{publicstaticvoidmain(Stringargs[]){SuperClasss1=newSubClass(20);
s1.printA();}}將調(diào)用子類的printA方法13instanceof關(guān)鍵字classStudent{}classGraduateextendsStudent{}classUndergraduateStudentextendsStudent{}publicclassst{publicstaticvoidmain(String[]args){UndergraduateStudents1=newUndergraduateStudent();Graduates2=newGraduate();Studentx;
x=s1;if(xinstanceofUndergraduateStudent)System.out.println(“x是UndergraduateStudent類的實例?!?;elseSystem.out.println(“x是Graduate類的實例?!?;}}instanceof測試第一個參數(shù)的運行時類型是否為與第二個參數(shù)兼容的賦值。x在運行時指向s1,所以if語句條件返回true14Object類Object類是類體系結(jié)構(gòu)的根Java系統(tǒng)中的每個類都是Object類直接或間接的子類Object類包括在java.lang包中此類定義了所有對象都具備的根本狀態(tài)和行為可以用類型為Object的變量來引用任意類型的對象所以任何對象使用instanceofObject返回的結(jié)果都為真!15類型轉(zhuǎn)換執(zhí)行自動類型轉(zhuǎn)換需要兩個條件:接受轉(zhuǎn)換的兩種類型是兼容的目的類型數(shù)的范圍比源類型的大強制類型轉(zhuǎn)換語句的通用格式如下:〔目標類型〕valueUndergraduateStudents1=newUndergraduateStudent();
Graduates2=newGraduate();Studentx;x=s1;Graduates3=newGraduate();if(xinstanceofGraduate)
s3=(Graduate)x;注意:從父類到子類的轉(zhuǎn)換,建議在轉(zhuǎn)換前判斷父類是否指向子類的對象byte->short->int->long->float->double16抽象類定義抽象類的目的是提供可由其子類共享的一般形式。子類可以根據(jù)自身需要擴展抽象類。抽象類不能實例化。抽象方法沒有函數(shù)體。抽象方法必須在子類中給出具體實現(xiàn)。abstract修飾符可與類和方法一起使用17抽象類在以下情況下,某個類將成為抽象類直接定義為abstract當(dāng)一個類的一個或多個方法為抽象方法時。當(dāng)該類為一個抽象類的子類,并且沒有為所有抽象方法提供實現(xiàn)細節(jié)或方法主體時。當(dāng)一個類實現(xiàn)一個接口,并且沒有為所有抽象方法提供實現(xiàn)細節(jié)或方法主體時。18抽象類例如abstractclassEmployee{ intbasic=2000;
abstractvoidsalary();//抽象方法}classManagerextendsEmployee{voidsalary(){ System.out.println("薪資等于"+basic*5);}}
classWorkerextendsEmployee{voidsalary(){ System.out.println("薪資等于"+basic*2);}}
抽象方法沒有方法主體在子類中提供實現(xiàn)在子類中提供實現(xiàn)19final關(guān)鍵字/final類final修飾符可應(yīng)用于類、方法和變量。final在應(yīng)用于類、方法和變量時意義是不同的,但本質(zhì)是一樣的:final表示不可改變。聲明為final的類不能被繼承。final類例如:
finalclassTestFinal{inti=7;intj=1;voidf(){}}
classFurtherextendsTestFinal{}
final類不能被繼承有繼承就有進化!而final關(guān)鍵字代表進化終止!20final方法在方法聲明中使用final關(guān)鍵字向編譯器說明子類不能覆蓋此方法。在聲明類中,一個final方法只被實現(xiàn)一次。如果一個類為final類,那么它的所有方法都為隱式的final方法。classTestFinal{finalvoidf(){}}
classFurtherextendsTestFinal{finalvoidf(){}}
final方法不能被覆蓋21final變量一個變量可以聲明為final,這樣做的目的是阻止它的內(nèi)容被修改。聲明final變量后,只能被初始化一次,然后就不能對其值進行修改。一個final變量實質(zhì)上是一個常量。
classFinalDemo{ publicstaticvoidmain(Stringargs[]){finalintnoChange=20;
noChange=30;
}}
final變量不能被修改22接口一個接口可以從幾個接口繼承一個類可實現(xiàn)幾個接口。Java程序一次只能繼承一個類但可以實現(xiàn)幾個接口。接口不能有任何具體的方法。接口也可用來定義可由類使用的一組常量,類型只能是publicstaticfinal,即為默認類型。接口提供“isa”關(guān)系。接口是一套標準和標準,沒有具體的實現(xiàn)細節(jié),只有常量和公有抽象方法。23創(chuàng)立接口//有方法的接口publicinterfacemyinterface{ publicvoidadd(intx,inty); publicvoidvolume(intx,inty,intz);}//定義程序使用的常量的接口publicinterfacemyconstants{ publicstaticfinaldoubleprice=1450.00;publicstaticfinalintcounter=5;}
定義一個接口:24創(chuàng)立接口用關(guān)鍵字implements實現(xiàn)接口,例如:classdemoimplementsmyinterface如果有一個以上接口被實現(xiàn),那么用逗號隔開接口名稱,如下所示:classdemoimplementsMycalc,Mycount25接口使用例如interfaceA{doubleg=9.8;voidshow();}classInterfaceTest{publicstaticvoidmain(Stringargs[]){Bb=newB();b.show();}}classBimplementsA{publicvoidshow(){System.out.println(“g=“+g);}}26多態(tài)在面向?qū)ο蟪绦蛟O(shè)計中,多態(tài)性原那么是一個根本的設(shè)計原那么所謂多態(tài)就是針對不同的對象發(fā)同樣的消息,這些對象的響應(yīng)是不一樣的。多態(tài)在生物界表現(xiàn)出來的就是生物多樣性。多態(tài)例如程序演示AnimalHumanDogFishCatSwimmer27包package包可以是類、接口和子包的集合在Java中,包主要有以下用途:集合相關(guān)的類和接口有助于防止命名沖突訪問控制:保護類、數(shù)據(jù)和方法package語句特性:放在第一句每個源文件最多只能一個包名應(yīng)小寫創(chuàng)立包的組織或團體的反向域名命名以java.*和javax.*開頭的包名被保存28使用包定義包
packagemypackage;
訪問Java包
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設(shè)備沉降觀測管理制度
- 設(shè)備設(shè)施檢查管理制度
- 設(shè)計公司人事管理制度
- 設(shè)計服飾搭配管理制度
- 評估公司人事管理制度
- 診所抓藥日常管理制度
- 診所行風(fēng)建設(shè)管理制度
- 試驗設(shè)施器材管理制度
- 財務(wù)部精細化管理制度
- 財政直達資金管理制度
- 2024網(wǎng)站滲透測試報告
- 2024年中國建筑西南勘察設(shè)計研究院有限公司招聘筆試參考題庫含答案解析
- DG-TJ08-2433A-2023 外墻保溫一體化系統(tǒng)應(yīng)用技術(shù)標準(預(yù)制混凝土反打保溫外墻)
- 教師法制教育培訓(xùn)課件
- 眾包物流模式下的資源整合與分配
- 鐵路貨運流程課件
- 四川省成都市成華區(qū)2023-2024學(xué)年七年級上學(xué)期期末數(shù)學(xué)試題(含答案)
- 慢性硬膜下血腫護理要點大揭秘
- 管工基礎(chǔ)知識培訓(xùn)課件
- 成人氣管切開拔管中國專家共識解讀
- “微”力量微博營銷
評論
0/150
提交評論