版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
面向?qū)ο筇匦缘谝豁?,共三十二頁?022年,8月28日本章內(nèi)容this關(guān)鍵字static關(guān)鍵字package和import語句類的繼承訪問控制方法的重寫Object類對(duì)象轉(zhuǎn)型多態(tài)抽象類接口第二頁,共三十二頁,2022年,8月28日this關(guān)鍵字在類的方法定義中使用的this關(guān)鍵字代表使用該方法的對(duì)象的引用。當(dāng)必須指出當(dāng)前使用方法的對(duì)象是誰時(shí)要使用this。有時(shí)使用this可以處理方法中成員變量和參數(shù)重名的情況。
publicclassLeaf{inti=0;publicLeaf(inti){this.i=i;}Leafincreament(){i++;returnthis;}voidprint(){System.out.println("i="+i);}publicstaticvoidmain(String[]args){Leafleaf=newLeaf(100);leaf.increament().increament().print();}}第三頁,共三十二頁,2022年,8月28日static關(guān)鍵字靜態(tài)成員變量在不創(chuàng)建類得對(duì)象的情況下,也可以使用,它是所有對(duì)象共有的變量,普通成員變量只有在創(chuàng)建了類的對(duì)象后才能被使用,與此相反,靜態(tài)變量可以不先創(chuàng)建對(duì)象而直接使用。靜態(tài)變量的聲明如下:staticinta;
類.a=10;
對(duì)象.a=20;第四頁,共三十二頁,2022年,8月28日publicclassTest{
staticinta;
intb;
publicstaticvoidmain(String[]args){Test.a=10;Testt1=newTest();Testt2=newTest();System.out.println(t1.a);t1.a=20;System.out.println(t1.a);t2.a=30;System.out.println(Test.a);
}}第五頁,共三十二頁,2022年,8月28日靜態(tài)方法只有在對(duì)象存在的條件下,我們才可以用成員變量和方法。然而,靜態(tài)方法則不需要首先創(chuàng)建對(duì)象,可以直接調(diào)用它,在使用靜態(tài)方法的時(shí)候一定要記住不可以在靜態(tài)的方法中調(diào)用非靜態(tài)的變量,如下程序:publicclassTest{ inta; staticvoidsetA(intb){ a=b; } publicstaticvoidmain(Stringargs[]){ Test.setA(10); }}第六頁,共三十二頁,2022年,8月28日靜態(tài)變量與靜態(tài)方法到底在什么方法中才能使用呢?如下程序publicclassTest{ staticinta; staticvoidhello(){ System.out.println("您好......");} staticvoidsetA(intb){ a=b; hello(); } voidprintA(){ System.out.println(a); hello(); } publicstaticvoidmain(Stringargs[]){ Test.setA(100); Testt=newTest(); t.printA();} }第七頁,共三十二頁,2022年,8月28日package和import語句為便于管理大型軟件系統(tǒng)中數(shù)目眾多的類,解決類的命名沖突問題,Java引入包(package)機(jī)制,提供類的多重類命名空間。第八頁,共三十二頁,2022年,8月28日package和import語句package語句作為Java源文件的第一條語句,指明該文件中定義的類所在的包。(若缺省該語句,則指定為無名包)。
它的格式為:packagepkg1[.pkg2[.pkg3…]];Java編譯器把包對(duì)應(yīng)于文件系統(tǒng)的目錄管理,package語句中,用‘.’來指明包(目錄)的層次,例如使用語句packagecom.cstp;則該文件中所有的類位于.com\cstp目錄下第九頁,共三十二頁,2022年,8月28日如果將一個(gè)類打包,則使用該類時(shí),必須使用該類的全名(例如:),Java編譯器才會(huì)在找到該類。也可以使用import在文件的開頭引入要使用到的類;例如:可以不需要用import語句直接使用java.lang包中的類。importcom.cstp.MyClass;importjava.util.*;//引入java.util包中所有的類
.........MyClassmyClass=newMyClass();//可以直接使用類名
.........第十頁,共三十二頁,2022年,8月28日Packageimport總結(jié)如果想將一個(gè)類放入包中,在這個(gè)類源文件第一句話寫package必須保證該類的class文件位于正確目錄下另外的類想訪問的話:寫全名引入*具體類名訪問位于同一個(gè)包中的類不需要引用第十一頁,共三十二頁,2022年,8月28日類的繼承與權(quán)限控制Java中使用extends關(guān)鍵字實(shí)現(xiàn)類的繼承機(jī)制通過繼承,子類自動(dòng)擁有了基類(superclass)的所有成員(成員變量和方法)。Java只支持單繼承,不允許多繼承:一個(gè)子類只能有一個(gè)基類一個(gè)基類可以派生出多個(gè)子類例子:TestExtends.java第十二頁,共三十二頁,2022年,8月28日訪問控制Java權(quán)限修飾符publicprotectedprivate置于類的成員定義前,用來限定其他對(duì)象對(duì)該類對(duì)象成員的訪問權(quán)限。對(duì)于class的權(quán)限修飾只可以用public和default。public類可以在任意地方被訪問default類只可以被同一個(gè)包內(nèi)部的類訪問修飾符類內(nèi)部同一個(gè)包子類任何地方privateYesdefault|packageYesYesprotectedYesYesYespublicYesYesYesYes第十三頁,共三十二頁,2022年,8月28日方法的重寫(OverWriteOverRide)在子類中可以根據(jù)需要對(duì)從基類中繼承來的方法進(jìn)行重寫。重寫方法必須和被重寫方法具有相同方法名稱、參數(shù)列表和返回類型。重寫方法不能使用比被重寫方法更嚴(yán)格的訪問權(quán)限。例子:TestOverWrite.java第十四頁,共三十二頁,2022年,8月28日super關(guān)鍵字在Java類中使用super來引用基類的成分;例如:classFatherClass{publicintvalue;publicvoidf(){value=100;("FatherClass.value="+value);}}classChildClassextendsFatherClass{publicintvalue;publicvoidf(){super.f();value=200;("ChildClass.value="+value);System.out.println(value);System.out.println(super.value);}}第十五頁,共三十二頁,2022年,8月28日繼承中的構(gòu)造方法1、子類的構(gòu)造過程中必須調(diào)用其基類的構(gòu)造方法。2、子類可以在自己的構(gòu)造方法中使用super(argument_list)調(diào)用基類的構(gòu)造方法。
3.如果使用super,必須寫在子類構(gòu)造方法的第一行。
4.如果子類的構(gòu)造方法中沒有顯示地調(diào)用基類構(gòu)造方法,則系統(tǒng)默認(rèn)調(diào)用基類無參數(shù)的構(gòu)造方法。
如果子類的構(gòu)造方法中沒有顯示地調(diào)用基類構(gòu)造方法,而基類中又沒有無參的構(gòu)造方法,則編譯出錯(cuò)。TestSuperSub.java第十六頁,共三十二頁,2022年,8月28日Object類Object類是所有Java類的根基類如果在類的聲明中未使用extends關(guān)鍵字指明其基類,則默認(rèn)基類為Object類
publicclassPerson{ ... }等價(jià)于:publicclassPersonextendsObject{ ...}第十七頁,共三十二頁,2022年,8月28日對(duì)象轉(zhuǎn)型一個(gè)基類的引用類型變量可以“指向”其子類的對(duì)象。一個(gè)基類的引用不可以訪問其子類對(duì)象新增加的成員(屬性和方法)??梢允褂靡米兞縤nstanceof類名來判斷該引用型變量所“指向”的對(duì)象是否屬于該類或該類的子類。第十八頁,共三十二頁,2022年,8月28日對(duì)象轉(zhuǎn)型實(shí)例(1)classAnimal{ publicStringname;Animal(Stringname){ =name; }}classCatextendsAnimal{ publicStringeyeColor; Cat(Stringn,Stringc){ super(n);eyeColor=c; }}ClassDogextendsAnimal{ publicStringfurColor; Dog(Stringn,Stringc){ super(n);furColor=c; }}第十九頁,共三十二頁,2022年,8月28日對(duì)象轉(zhuǎn)型實(shí)例(2)publicclassTest{ publicstaticvoidmain(String[]args){ Animala=newAnimal("name"); Catc=newCat("catname","blue"); Dogd=newDog("dogname","black");
System.out.println(ainstanceofAnimal);//true; System.out.println(cinstanceofAnimal);//true; System.out.println(dinstanceofAnimal);//true; System.out.println(cinstanceofCat);//true;
a=newDog("bigyellow","yellow"); System.out.println();//bigyellow System.out.println(ainstanceofAnimal);//true; System.out.println(ainstanceofDog);//true; Dogd1=(Dog)a;//要加強(qiáng)制轉(zhuǎn)換符
System.out.println(d1.furColor);//yellow }}第二十頁,共三十二頁,2022年,8月28日多態(tài)多態(tài)源于希臘語,本意為“擁有多種形態(tài)”,在Java中,它指的是擁有相同形式,但根據(jù)不同的情形擁有不同機(jī)能的特性。例子,“數(shù)字+數(shù)字=數(shù)字”,然而,“String對(duì)象+數(shù)字=String對(duì)象”,根據(jù)不同的情形,“+”運(yùn)算符擁有不同的功能,既“+”運(yùn)算符具有多態(tài)性。還有實(shí)現(xiàn)了重載或重寫的方法擁有相同的名字,但不同情形下,他們又擁有不同的功能,所以重載和重寫也是一種多態(tài)。第二十一頁,共三十二頁,2022年,8月28日父類的引用指向子類對(duì)象從對(duì)象的內(nèi)存角度來理解試試.
假設(shè)現(xiàn)在有一個(gè)父類Father,它里面的變量需要占用1M內(nèi)存.有一個(gè)它的子類Son,它里面的變量需要占用0.5M內(nèi)存.
現(xiàn)在通過代碼來看看內(nèi)存的分配情況:
Father
f
=
new
Father();//系統(tǒng)將分配1M內(nèi)存.
Son
s
=
new
Son();//系統(tǒng)將分配1.5M內(nèi)存!因?yàn)樽宇愔杏幸粋€(gè)隱藏的引用super會(huì)指向父類實(shí)例,所以在實(shí)例化子類之前會(huì)先實(shí)例化一個(gè)父類,也就是說會(huì)先執(zhí)行父類的構(gòu)造函數(shù).由于s中包含了父類的實(shí)例,所以s可以調(diào)用父類的方法.
Son
s1
=
s;//s1指向那1.5M的內(nèi)存.
Father
f1
=
(Father)s;//這時(shí)f1會(huì)指向那1.5M內(nèi)存中的1M內(nèi)存,即是說,f1只是指向了s中實(shí)例的父類實(shí)例對(duì)象,所以f1只能調(diào)用父類的方法(存儲(chǔ)在1M內(nèi)存中),而不能調(diào)用子類的方法(存儲(chǔ)在0.5M內(nèi)存中).
Son
s2
=
(Son)f;//這句代碼運(yùn)行時(shí)會(huì)報(bào)ClassCastException.因?yàn)閒中只有1M內(nèi)存,而子類的引用都必須要有1.5M的內(nèi)存,所以無法轉(zhuǎn)換.
Son
s3
=
(Son)f1;//這句可以通過運(yùn)行,這時(shí)s3指向那1.5M的內(nèi)存.由于f1是由s轉(zhuǎn)換過來的,所以它是有1.5M的內(nèi)存的,只是它指向的只有1M內(nèi)存.第二十二頁,共三十二頁,2022年,8月28日抽象類用abstract關(guān)鍵字來修飾一個(gè)類時(shí),這個(gè)類叫做抽象類;用abstract來修飾一個(gè)方法時(shí),該方法叫做抽象方法。含有抽象方法的類必須被聲明為抽象類,抽象類必須被繼承,抽象方法必須被重寫。如果重寫不了,應(yīng)該聲明自己為抽象。抽象類不能被實(shí)例化。抽象方法只需聲明,而不需實(shí)現(xiàn)。例子:第二十三頁,共三十二頁,2022年,8月28日
abstractclassAnimal{privateStringname;Animal(Stringname){=name;}publicabstractvoidenjoy();}classCatextendsAnimal{privateStringeyesColor;Cat(Stringn,Stringc){super(n);eyesColor=c;}publicvoidenjoy(){ ("貓叫聲......");}}第二十四頁,共三十二頁,2022年,8月28日Final關(guān)鍵字final修飾的變量的值不能夠被改變final的成員變量final的局部變量(形參)final修飾的方法不能夠被重寫final修飾的類不能夠被繼承例子:第二十五頁,共三十二頁,2022年,8月28日接口接口(interface)是抽象方法和常量值的定義的集合。從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實(shí)現(xiàn)。接口定義舉例: publicinterfaceRunner{ publicstaticfinalintid=1; publicvoidstart(); publicvoidrun(); publicvoidstop(); }第二十六頁,共三十二頁,2022年,8月28日接口特性接口可以多重實(shí)現(xiàn);接口中聲明的屬性默認(rèn)為public的;也只能是public的;接口中只能定義抽象方法,而且這些方法默認(rèn)為public的、也只能是public的;接口可以繼承其它的接口,并添加新的屬性和抽象方法。第二十七頁,共三十二頁,2022年,8月28日接口多個(gè)無關(guān)的類可以實(shí)現(xiàn)同一個(gè)接口。一個(gè)類可以實(shí)現(xiàn)多個(gè)無關(guān)的接口。與繼承關(guān)系類似,接口與實(shí)現(xiàn)類之間存在多態(tài)性。定義Java類的語法格式:
<modifier>class<name>[extends<superclass>] [implements<interface>[,<interface>]*]{ <declarations>* }第二十八頁,共三十二頁,2022年,8月28日接口舉例
interfaceSinger{publicvoidsing();publicvoidsleep();}classStudentimplementsSinger{publicvoidstudy(){System.out.println("studying");}
publicvoidsing(){System.out.println("studentissinging");}publicvoidsleep(){System.out.println("studentissleeping");}}第二十九頁,共三十二頁,2022年,8月28日一個(gè)類可以實(shí)現(xiàn)多個(gè)無關(guān)的接口
interfaceSinger{
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 芒市別墅防腐木施工方案
- 二零二五版小汽車車牌租賃與租賃車輛使用限制合同
- 二零二五年度基礎(chǔ)設(shè)施建設(shè)合作協(xié)議2篇
- 水池回廊景石施工方案
- 二零二五年度個(gè)人股權(quán)投資退出協(xié)議2篇
- 二零二五年度高品質(zhì)住宅小區(qū)物業(yè)經(jīng)營(yíng)權(quán)轉(zhuǎn)讓合同3篇
- 二零二五年度個(gè)人教育培訓(xùn)機(jī)構(gòu)合作協(xié)議范本3篇
- 2025版送氣工被辭退經(jīng)濟(jì)補(bǔ)償合同3篇
- 二零二五年度個(gè)人旅游保險(xiǎn)代理銷售合同(出境游保障)
- 蒸壓加氣混凝土砌塊砌筑施工方案
- 山東省泰安市2022年初中學(xué)業(yè)水平考試生物試題
- 注塑部質(zhì)量控制標(biāo)準(zhǔn)全套
- 受賄案例心得體會(huì)
- 人教A版高中數(shù)學(xué)選擇性必修第一冊(cè)第二章直線和圓的方程-經(jīng)典例題及配套練習(xí)題含答案解析
- 畢業(yè)設(shè)計(jì)(論文)-液體藥品灌裝機(jī)的設(shè)計(jì)與制造
- 銀行網(wǎng)點(diǎn)服務(wù)禮儀標(biāo)準(zhǔn)培訓(xùn)課件
- 二年級(jí)下冊(cè)數(shù)學(xué)教案 -《數(shù)一數(shù)(二)》 北師大版
- 晶體三極管資料
- 銀行內(nèi)部舉報(bào)管理規(guī)定
- 石群邱關(guān)源電路(第1至7單元)白底課件
- 平面幾何強(qiáng)化訓(xùn)練題集:初中分冊(cè)數(shù)學(xué)練習(xí)題
評(píng)論
0/150
提交評(píng)論