面向?qū)ο筇匦訽第1頁(yè)
面向?qū)ο筇匦訽第2頁(yè)
面向?qū)ο筇匦訽第3頁(yè)
面向?qū)ο筇匦訽第4頁(yè)
面向?qū)ο筇匦訽第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論