java中特殊關(guān)鍵字_第1頁
java中特殊關(guān)鍵字_第2頁
java中特殊關(guān)鍵字_第3頁
java中特殊關(guān)鍵字_第4頁
java中特殊關(guān)鍵字_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

ObjectorientedadvancedJava特殊關(guān)鍵學(xué)習(xí)及面向?qū)ο笤磉M(jìn)階2目標(biāo)掌握類的靜態(tài)成員:static掌握繼承的概念和用法:extends掌握抽象類的定義和用法:abstract掌握final關(guān)鍵字用法掌握接口的定義和用法:interface,implements多態(tài)例如了解包的使用:package3類的靜態(tài)成員類中的靜態(tài)變量、靜態(tài)方法或靜態(tài)代碼塊屬于類,而不屬于某個(gè)特定的對象。類的靜態(tài)成員可以與類的名稱一起使用,而無需創(chuàng)立類的對象。靜態(tài)變量或方法也稱為類的變量或方法。用static修飾符修飾,可以是變量、方法或代碼塊4靜態(tài)變量不管創(chuàng)立了類的多少實(shí)例,整個(gè)類中靜態(tài)變量的副本只有一個(gè)。引用靜態(tài)變量的方法:通過引用類的任一實(shí)例通過類的名稱〔建議〕classA{staticintx=0;

A(){x++;}}Aa1=newA();Aa2=newA();a1.x=100;a2.x=200;inty=a1.x;

通過類實(shí)例訪問不是一個(gè)好方法Aa1=newA();Aa2=newA();A.x=100;A.x=200;inty=A.x;

聲明為static的變量實(shí)質(zhì)上就是全局變量通過類名訪問5靜態(tài)方法與靜態(tài)方法相關(guān)的幾個(gè)要點(diǎn):類的靜態(tài)方法只能訪問其他的靜態(tài)成員靜態(tài)方法沒有this靜態(tài)方法不能被覆蓋(重寫)為非靜態(tài)方法classA{staticinti=10;intj;

staticvoidsetValue(intx){

j=x;//出錯(cuò)

System.out.println(""+i);}}不能訪問非靜態(tài)變量j,可以訪問靜態(tài)變量iclassB{staticvoidtest(){}}classCextendsB{

voidtest(){}//出錯(cuò)}

6靜態(tài)塊如果需要通過計(jì)算來初始化靜態(tài)變量,可以聲明一個(gè)靜態(tài)塊。靜態(tài)塊僅在該類被加載時(shí)執(zhí)行一次。只能初始化類的靜態(tài)數(shù)據(jù)成員。

classA{

staticintx;//靜態(tài)成員

inty;//非靜態(tài)成員

static{

x=1; y=1; System.out.println("staticblock:"+x);}}

7被繼承的類稱為父類繼承父類的類稱為子類執(zhí)行繼承時(shí),子類將獲得父類的屬性,并具有自身特有的屬性。

Emoloyee類:namesexWorker類:categorydressAllowanceOfficer類:empClassvehicle職員類,具有姓名和性別兩個(gè)屬性工人類,繼承了父類的姓名和性別屬性外還包含類別和是否有服裝津貼屬性主任類,還包含級別和是否配備交通工具屬性繼承繼承是面向?qū)ο缶幊碳夹g(shù)的一塊基石,它允許創(chuàng)立分等級層次的類。運(yùn)用繼承,可以創(chuàng)立一個(gè)通用類定義一系列一般特性。該類可以被更具體的類繼承。8extends關(guān)鍵字extends關(guān)鍵字用于繼承類。聲明一個(gè)繼承父類的類的通常形式如下:classsubclass-nameextendssuperclass-name{//類體}

沒有extends,默認(rèn)父類為Object只能有一個(gè)父類,即單繼承子類繼承父類的public和protected成員注意9super關(guān)鍵字super關(guān)鍵字用來解決如何直接訪問或初始化從父類繼承來的屬性。super有兩種通用形式:調(diào)用父類的構(gòu)造函數(shù),將構(gòu)造細(xì)節(jié)通過繼承鏈往上傳遞。注意:

super()(或其重載的構(gòu)造函數(shù))必須是在子類構(gòu)造函數(shù)中的第一個(gè)執(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實(shí)現(xiàn)多態(tài)性機(jī)制的另一種方式。在類層次結(jié)構(gòu)中,如果子類中的一個(gè)方法與父類中的方法有相同的方法名并具有相同數(shù)量和類型的參數(shù)列表,這種情況稱為方法覆蓋〔重寫〕。當(dāng)一個(gè)覆蓋方法通過父類引用被調(diào)用,Java根據(jù)當(dāng)前被引用對象的類型來決定執(zhí)行哪個(gè)版本的方法??梢酝ㄟ^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類的實(shí)例?!?;elseSystem.out.println(“x是Graduate類的實(shí)例。”);}}instanceof測試第一個(gè)參數(shù)的運(yùn)行時(shí)類型是否為與第二個(gè)參數(shù)兼容的賦值。x在運(yùn)行時(shí)指向s1,所以if語句條件返回true14Object類Object類是類體系結(jié)構(gòu)的根Java系統(tǒng)中的每個(gè)類都是Object類直接或間接的子類Object類包括在java.lang包中此類定義了所有對象都具備的根本狀態(tài)和行為可以用類型為Object的變量來引用任意類型的對象所以任何對象使用instanceofObject返回的結(jié)果都為真!15類型轉(zhuǎn)換執(zhí)行自動(dòng)類型轉(zhuǎn)換需要兩個(gè)條件:接受轉(zhuǎn)換的兩種類型是兼容的目的類型數(shù)的范圍比源類型的大強(qiáng)制類型轉(zhuǎn)換語句的通用格式如下:〔目標(biāo)類型〕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ù)自身需要擴(kuò)展抽象類。抽象類不能實(shí)例化。抽象方法沒有函數(shù)體。抽象方法必須在子類中給出具體實(shí)現(xiàn)。abstract修飾符可與類和方法一起使用17抽象類在以下情況下,某個(gè)類將成為抽象類直接定義為abstract當(dāng)一個(gè)類的一個(gè)或多個(gè)方法為抽象方法時(shí)。當(dāng)該類為一個(gè)抽象類的子類,并且沒有為所有抽象方法提供實(shí)現(xiàn)細(xì)節(jié)或方法主體時(shí)。當(dāng)一個(gè)類實(shí)現(xiàn)一個(gè)接口,并且沒有為所有抽象方法提供實(shí)現(xiàn)細(xì)節(jié)或方法主體時(shí)。18抽象類例如abstractclassEmployee{ intbasic=2000;

abstractvoidsalary();//抽象方法}classManagerextendsEmployee{voidsalary(){ System.out.println("薪資等于"+basic*5);}}

classWorkerextendsEmployee{voidsalary(){ System.out.println("薪資等于"+basic*2);}}

抽象方法沒有方法主體在子類中提供實(shí)現(xiàn)在子類中提供實(shí)現(xiàn)19final關(guān)鍵字/final類final修飾符可應(yīng)用于類、方法和變量。final在應(yīng)用于類、方法和變量時(shí)意義是不同的,但本質(zhì)是一樣的:final表示不可改變。聲明為final的類不能被繼承。final類例如:

finalclassTestFinal{inti=7;intj=1;voidf(){}}

classFurtherextendsTestFinal{}

final類不能被繼承有繼承就有進(jìn)化!而final關(guān)鍵字代表進(jìn)化終止!20final方法在方法聲明中使用final關(guān)鍵字向編譯器說明子類不能覆蓋此方法。在聲明類中,一個(gè)final方法只被實(shí)現(xiàn)一次。如果一個(gè)類為final類,那么它的所有方法都為隱式的final方法。classTestFinal{finalvoidf(){}}

classFurtherextendsTestFinal{finalvoidf(){}}

final方法不能被覆蓋21final變量一個(gè)變量可以聲明為final,這樣做的目的是阻止它的內(nèi)容被修改。聲明final變量后,只能被初始化一次,然后就不能對其值進(jìn)行修改。一個(gè)final變量實(shí)質(zhì)上是一個(gè)常量。

classFinalDemo{ publicstaticvoidmain(Stringargs[]){finalintnoChange=20;

noChange=30;

}}

final變量不能被修改22接口一個(gè)接口可以從幾個(gè)接口繼承一個(gè)類可實(shí)現(xiàn)幾個(gè)接口。Java程序一次只能繼承一個(gè)類但可以實(shí)現(xiàn)幾個(gè)接口。接口不能有任何具體的方法。接口也可用來定義可由類使用的一組常量,類型只能是publicstaticfinal,即為默認(rèn)類型。接口提供“isa”關(guān)系。接口是一套標(biāo)準(zhǔn)和標(biāo)準(zhǔn),沒有具體的實(shí)現(xiàn)細(xì)節(jié),只有常量和公有抽象方法。23創(chuàng)立接口//有方法的接口publicinterfacemyinterface{ publicvoidadd(intx,inty); publicvoidvolume(intx,inty,intz);}//定義程序使用的常量的接口publicinterfacemyconstants{ publicstaticfinaldoubleprice=1450.00;publicstaticfinalintcounter=5;}

定義一個(gè)接口:24創(chuàng)立接口用關(guān)鍵字implements實(shí)現(xiàn)接口,例如:classdemoimplementsmyinterface如果有一個(gè)以上接口被實(shí)現(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è)計(jì)中,多態(tài)性原那么是一個(gè)根本的設(shè)計(jì)原那么所謂多態(tài)就是針對不同的對象發(fā)同樣的消息,這些對象的響應(yīng)是不一樣的。多態(tài)在生物界表現(xiàn)出來的就是生物多樣性。多態(tài)例如程序演示AnimalHumanDogFishCatSwimmer27包package包可以是類、接口和子包的集合在Java中,包主要有以下用途:集合相關(guān)的類和接口有助于防止命名沖突訪問控制:保護(hù)類、數(shù)據(jù)和方法package語句特性:放在第一句每個(gè)源文件最多只能一個(gè)包名應(yīng)小寫創(chuàng)立包的組織或團(tuán)體的反向域名命名以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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論