版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
面向?qū)ο筇匦缘谝豁?yè),共三十二頁(yè),2022年,8月28日本章內(nèi)容this關(guān)鍵字static關(guān)鍵字package和import語(yǔ)句類的繼承訪問(wèn)控制方法的重寫Object類對(duì)象轉(zhuǎn)型多態(tài)抽象類接口第二頁(yè),共三十二頁(yè),2022年,8月28日this關(guān)鍵字在類的方法定義中使用的this關(guān)鍵字代表使用該方法的對(duì)象的引用。當(dāng)必須指出當(dāng)前使用方法的對(duì)象是誰(shuí)時(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();}}第三頁(yè),共三十二頁(yè),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;第四頁(yè),共三十二頁(yè),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);
}}第五頁(yè),共三十二頁(yè),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); }}第六頁(yè),共三十二頁(yè),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();} }第七頁(yè),共三十二頁(yè),2022年,8月28日package和import語(yǔ)句為便于管理大型軟件系統(tǒng)中數(shù)目眾多的類,解決類的命名沖突問(wèn)題,Java引入包(package)機(jī)制,提供類的多重類命名空間。第八頁(yè),共三十二頁(yè),2022年,8月28日package和import語(yǔ)句package語(yǔ)句作為Java源文件的第一條語(yǔ)句,指明該文件中定義的類所在的包。(若缺省該語(yǔ)句,則指定為無(wú)名包)。
它的格式為:packagepkg1[.pkg2[.pkg3…]];Java編譯器把包對(duì)應(yīng)于文件系統(tǒng)的目錄管理,package語(yǔ)句中,用‘.’來(lái)指明包(目錄)的層次,例如使用語(yǔ)句packagecom.cstp;則該文件中所有的類位于.com\cstp目錄下第九頁(yè),共三十二頁(yè),2022年,8月28日如果將一個(gè)類打包,則使用該類時(shí),必須使用該類的全名(例如:),Java編譯器才會(huì)在找到該類。也可以使用import在文件的開頭引入要使用到的類;例如:可以不需要用import語(yǔ)句直接使用java.lang包中的類。importcom.cstp.MyClass;importjava.util.*;//引入java.util包中所有的類
.........MyClassmyClass=newMyClass();//可以直接使用類名
.........第十頁(yè),共三十二頁(yè),2022年,8月28日Packageimport總結(jié)如果想將一個(gè)類放入包中,在這個(gè)類源文件第一句話寫package必須保證該類的class文件位于正確目錄下另外的類想訪問(wèn)的話:寫全名引入*具體類名訪問(wèn)位于同一個(gè)包中的類不需要引用第十一頁(yè),共三十二頁(yè),2022年,8月28日類的繼承與權(quán)限控制Java中使用extends關(guān)鍵字實(shí)現(xiàn)類的繼承機(jī)制通過(guò)繼承,子類自動(dòng)擁有了基類(superclass)的所有成員(成員變量和方法)。Java只支持單繼承,不允許多繼承:一個(gè)子類只能有一個(gè)基類一個(gè)基類可以派生出多個(gè)子類例子:TestExtends.java第十二頁(yè),共三十二頁(yè),2022年,8月28日訪問(wèn)控制Java權(quán)限修飾符publicprotectedprivate置于類的成員定義前,用來(lái)限定其他對(duì)象對(duì)該類對(duì)象成員的訪問(wèn)權(quán)限。對(duì)于class的權(quán)限修飾只可以用public和default。public類可以在任意地方被訪問(wèn)default類只可以被同一個(gè)包內(nèi)部的類訪問(wèn)修飾符類內(nèi)部同一個(gè)包子類任何地方privateYesdefault|packageYesYesprotectedYesYesYespublicYesYesYesYes第十三頁(yè),共三十二頁(yè),2022年,8月28日方法的重寫(OverWriteOverRide)在子類中可以根據(jù)需要對(duì)從基類中繼承來(lái)的方法進(jìn)行重寫。重寫方法必須和被重寫方法具有相同方法名稱、參數(shù)列表和返回類型。重寫方法不能使用比被重寫方法更嚴(yán)格的訪問(wèn)權(quán)限。例子:TestOverWrite.java第十四頁(yè),共三十二頁(yè),2022年,8月28日super關(guān)鍵字在Java類中使用super來(lái)引用基類的成分;例如: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);}}第十五頁(yè),共三十二頁(yè),2022年,8月28日繼承中的構(gòu)造方法1、子類的構(gòu)造過(guò)程中必須調(diào)用其基類的構(gòu)造方法。2、子類可以在自己的構(gòu)造方法中使用super(argument_list)調(diào)用基類的構(gòu)造方法。
3.如果使用super,必須寫在子類構(gòu)造方法的第一行。
4.如果子類的構(gòu)造方法中沒(méi)有顯示地調(diào)用基類構(gòu)造方法,則系統(tǒng)默認(rèn)調(diào)用基類無(wú)參數(shù)的構(gòu)造方法。
如果子類的構(gòu)造方法中沒(méi)有顯示地調(diào)用基類構(gòu)造方法,而基類中又沒(méi)有無(wú)參的構(gòu)造方法,則編譯出錯(cuò)。TestSuperSub.java第十六頁(yè),共三十二頁(yè),2022年,8月28日Object類Object類是所有Java類的根基類如果在類的聲明中未使用extends關(guān)鍵字指明其基類,則默認(rèn)基類為Object類
publicclassPerson{ ... }等價(jià)于:publicclassPersonextendsObject{ ...}第十七頁(yè),共三十二頁(yè),2022年,8月28日對(duì)象轉(zhuǎn)型一個(gè)基類的引用類型變量可以“指向”其子類的對(duì)象。一個(gè)基類的引用不可以訪問(wèn)其子類對(duì)象新增加的成員(屬性和方法)??梢允褂靡米兞縤nstanceof類名來(lái)判斷該引用型變量所“指向”的對(duì)象是否屬于該類或該類的子類。第十八頁(yè),共三十二頁(yè),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; }}第十九頁(yè),共三十二頁(yè),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 }}第二十頁(yè),共三十二頁(yè),2022年,8月28日多態(tài)多態(tài)源于希臘語(yǔ),本意為“擁有多種形態(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)。第二十一頁(yè),共三十二頁(yè),2022年,8月28日父類的引用指向子類對(duì)象從對(duì)象的內(nèi)存角度來(lái)理解試試.
假設(shè)現(xiàn)在有一個(gè)父類Father,它里面的變量需要占用1M內(nèi)存.有一個(gè)它的子類Son,它里面的變量需要占用0.5M內(nèi)存.
現(xiàn)在通過(guò)代碼來(lái)看看內(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è)父類,也就是說(shuō)會(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)存,即是說(shuō),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)存,所以無(wú)法轉(zhuǎn)換.
Son
s3
=
(Son)f1;//這句可以通過(guò)運(yùn)行,這時(shí)s3指向那1.5M的內(nèi)存.由于f1是由s轉(zhuǎn)換過(guò)來(lái)的,所以它是有1.5M的內(nèi)存的,只是它指向的只有1M內(nèi)存.第二十二頁(yè),共三十二頁(yè),2022年,8月28日抽象類用abstract關(guān)鍵字來(lái)修飾一個(gè)類時(shí),這個(gè)類叫做抽象類;用abstract來(lái)修飾一個(gè)方法時(shí),該方法叫做抽象方法。含有抽象方法的類必須被聲明為抽象類,抽象類必須被繼承,抽象方法必須被重寫。如果重寫不了,應(yīng)該聲明自己為抽象。抽象類不能被實(shí)例化。抽象方法只需聲明,而不需實(shí)現(xiàn)。例子:第二十三頁(yè),共三十二頁(yè),2022年,8月28日
abstractclassAnimal{privateStringname;Animal(Stringname){=name;}publicabstractvoidenjoy();}classCatextendsAnimal{privateStringeyesColor;Cat(Stringn,Stringc){super(n);eyesColor=c;}publicvoidenjoy(){ ("貓叫聲......");}}第二十四頁(yè),共三十二頁(yè),2022年,8月28日Final關(guān)鍵字final修飾的變量的值不能夠被改變final的成員變量final的局部變量(形參)final修飾的方法不能夠被重寫final修飾的類不能夠被繼承例子:第二十五頁(yè),共三十二頁(yè),2022年,8月28日接口接口(interface)是抽象方法和常量值的定義的集合。從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒(méi)有變量和方法的實(shí)現(xiàn)。接口定義舉例: publicinterfaceRunner{ publicstaticfinalintid=1; publicvoidstart(); publicvoidrun(); publicvoidstop(); }第二十六頁(yè),共三十二頁(yè),2022年,8月28日接口特性接口可以多重實(shí)現(xiàn);接口中聲明的屬性默認(rèn)為public的;也只能是public的;接口中只能定義抽象方法,而且這些方法默認(rèn)為public的、也只能是public的;接口可以繼承其它的接口,并添加新的屬性和抽象方法。第二十七頁(yè),共三十二頁(yè),2022年,8月28日接口多個(gè)無(wú)關(guān)的類可以實(shí)現(xiàn)同一個(gè)接口。一個(gè)類可以實(shí)現(xiàn)多個(gè)無(wú)關(guān)的接口。與繼承關(guān)系類似,接口與實(shí)現(xiàn)類之間存在多態(tài)性。定義Java類的語(yǔ)法格式:
<modifier>class<name>[extends<superclass>] [implements<interface>[,<interface>]*]{ <declarations>* }第二十八頁(yè),共三十二頁(yè),2022年,8月28日接口舉例
interfaceSinger{publicvoidsing();publicvoidsleep();}classStudentimplementsSinger{publicvoidstudy(){System.out.println("studying");}
publicvoidsing(){System.out.println("studentissinging");}publicvoidsleep(){System.out.println("studentissleeping");}}第二十九頁(yè),共三十二頁(yè),2022年,8月28日一個(gè)類可以實(shí)現(xiàn)多個(gè)無(wú)關(guān)的接口
interfaceSinger{
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度養(yǎng)老服務(wù)業(yè)招標(biāo)文件編制與養(yǎng)老服務(wù)標(biāo)準(zhǔn)合同3篇
- 二零二五版E管材國(guó)際環(huán)境友好采購(gòu)合同3篇
- 2025年度環(huán)保型包裝材料研發(fā)與市場(chǎng)銷售合同3篇
- 2025年度綠色有機(jī)大米直供采購(gòu)合同3篇
- 2025年無(wú)證房買賣合同范本解讀與實(shí)施手冊(cè)6篇
- 二零二五年度裝配式建筑構(gòu)件安裝質(zhì)量保修合同3篇
- 現(xiàn)代文學(xué)史自考知識(shí)點(diǎn):郭沫若的作品
- 二零二四年體育場(chǎng)館高空作業(yè)腳手架勞務(wù)分包合同2篇
- 2024版煙酒零售購(gòu)銷協(xié)議樣本一
- 2025年度新型環(huán)保儲(chǔ)藏室設(shè)施買賣合同協(xié)議書3篇
- GB/T 12914-2008紙和紙板抗張強(qiáng)度的測(cè)定
- GB/T 1185-2006光學(xué)零件表面疵病
- ps6000自動(dòng)化系統(tǒng)用戶操作及問(wèn)題處理培訓(xùn)
- 家庭教養(yǎng)方式問(wèn)卷(含評(píng)分標(biāo)準(zhǔn))
- 城市軌道交通安全管理課件(完整版)
- 線纜包覆擠塑模設(shè)計(jì)和原理
- TSG ZF001-2006 安全閥安全技術(shù)監(jiān)察規(guī)程
- 部編版二年級(jí)語(yǔ)文下冊(cè)《蜘蛛開店》
- 鍋爐升降平臺(tái)管理
- 200m3╱h凈化水處理站設(shè)計(jì)方案
- 個(gè)體化健康教育記錄表格模板1
評(píng)論
0/150
提交評(píng)論