第三章面向?qū)ο蟪绦蛟O計_第1頁
第三章面向?qū)ο蟪绦蛟O計_第2頁
第三章面向?qū)ο蟪绦蛟O計_第3頁
第三章面向?qū)ο蟪绦蛟O計_第4頁
第三章面向?qū)ο蟪绦蛟O計_第5頁
已閱讀5頁,還剩90頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第三章Java與面向?qū)ο蠹夹g1、面向?qū)ο蟮母拍?、Java中的類、方法和變量3、Java名字空間及訪問規(guī)則4、Java中的抽象類、接口和程序包5、對象的構造方法6.初始化塊

所謂面向?qū)ο蟮姆椒▽W,就是使我們分析、設計和實現(xiàn)一個系統(tǒng)的方法盡可能地接近我們認識一個系統(tǒng)的方法。包括:1、面向?qū)ο蟮母拍?/p>

面向?qū)ο蟮姆治觯∣OA,Object-OrientedAnalysis)面向?qū)ο蟮脑O計(OOD,Object-OrientedDesign)面向?qū)ο蟮某绦蛟O計(OOPL,Object-OrientedProgram)面向?qū)ο蠹夹g主要圍繞以下幾個概念:

對象、抽象數(shù)據(jù)類型、類、類型層次(子類)、繼承性、多態(tài)性。

對象有兩個層次的概念:變量方法1、面向?qū)ο蟮母拍?/p>

——對象

現(xiàn)實生活中對象指的是客觀世界的實體;

程序中對象就是一組變量和相關方法的集合,其中變量表明對象的狀態(tài),方法表明對象所具有的行為。現(xiàn)實生活中的對象可以將現(xiàn)實生活中的對象經(jīng)過抽象,映射為程序中的對象。ClassCar{intcolor_number;intdoor_number;

intspeed;

voidbrake(){…}voidspeedUp(){…}voidslowDown(){…}}

抽象數(shù)據(jù)類型1、面向?qū)ο蟮母拍?/p>

——對象

對象在程序中是通過一種抽象數(shù)據(jù)類型來描述的,這種抽象數(shù)據(jù)類型稱為類(Class)。程序中的對象是類的一個實例,是一個軟件單元,它由一組結構化的數(shù)據(jù)和在其上的一組操作構成。1、面向?qū)ο蟮母拍?/p>

——類相似的對象可以歸并到同一個類中去,就像傳統(tǒng)語言中的變量與類型關系一樣。

類是描述對象的“基本原型”,它定義一類對象所能擁有的數(shù)據(jù)和能完成的操作。在面向?qū)ο蟮某绦蛟O計中,類是程序的基本單元?!瑿arcar1;Carcar2;…

…CarcarN;1、面向?qū)ο蟮母拍?/p>

——類消息軟件對象通過相互間傳遞消息來相互作用和通信,一個消息由三部分組成:1.接受消息的對象

2.接收對象要采取的方法

3.方法需要的參數(shù)對象B對象A消息1、面向?qū)ο蟮母拍?/p>

——類變量:指對象的所知道的狀態(tài)。方法:指對象的功能單元。一個例子classHello{

}privateStrings;publicvoidshowString(){System.out.println(s);}publicvoidchangeString(Stringstr){s=str;}變量方法showString()方法changeString()1、面向?qū)ο蟮母拍睢愓{(diào)用對象的方法相當于給對象發(fā)送消息,收到消息的對象通過改變自身的狀態(tài)或者向其它對象發(fā)送消息來響應消息。在程序中所操作的對象是類的一個實例。創(chuàng)建一個對象:Helloobj=newHello();調(diào)用方法:obj.changeString(“dance”);

為什么要使用類?1、面向?qū)ο蟮母拍?/p>

——類采用簡單數(shù)據(jù)類型表示現(xiàn)實世界中概念的存在很大的局限性。例如:采用int型數(shù)據(jù)表示一個日期概念,需要使用3個變量:

intday,month,year;

使用類可以把現(xiàn)實問題中的對象映射為程序中的一個整體——類。如果要表示2個人的生日,就要使用6個變量并且在使用中必須時刻注意三者的聯(lián)系和約束關系intday1,month1,year1;intday2,month2,year2;類中不但有變量,還有與之相關的操作所定義的方法。將變量和方法封裝在一個類中,可以對成員變量進行隱藏,外部對類成員的訪問都通過方法進行,能夠保護類成員不被非法修改。classBirthDate{publicintday,month,year;publicinttomorrow(){}}BirthDatemybirth,yourbirth;1、面向?qū)ο蟮母拍?/p>

——類BirthDatelily;lily.day=31;lily.month=5;lily.year=1992;已知當前日期對象,求第2天的日期對象:lily.day=lily.day+1;如果lily.day已經(jīng)為31,操作結果是非法狀態(tài)。使用類的另一個方便之處,就是操作上的方便為什么要使用類?可以定義一個成員方法tomorrow(),求第2天的日期對象。外部要獲得當前日期的后一天時,只要調(diào)用: lily.tomorrow();封裝把對象的所有組成部分組合在一起私有數(shù)據(jù)

方法

方法數(shù)據(jù)對象A對象B公有數(shù)據(jù)封裝定義程序如何引用對象的數(shù)據(jù),封裝實際上使用方法將類的數(shù)據(jù)隱藏起來,控制用戶對類的修改和訪問數(shù)據(jù)的程度。1、面向?qū)ο蟮母拍?/p>

——封裝子類是作為另一個類的擴充或修正而定義的一個類。bicycle(superclass)MountainbikesRacingbikesTandembikessubclass1、面向?qū)ο蟮母拍?/p>

——子類繼承是子類利用父類中定義的方法和變量,就像它們屬于子類本身一樣。classCar{intcolor_number;intdoor_number;intspeed;publicvoidpush_break(){…}publicvoidadd_oil(){…}}

classTrash_CarextendsCar{doubleamount;publicvoidfill_trash(){…}}1、面向?qū)ο蟮母拍?/p>

——繼承extendsCar的作用就是copy了父類定義的變量和方法方法的重寫重寫使得在子類中可以重新定義父類中已有的方法,從而體現(xiàn)出子類自己的行為。classCar{intcolor_number;intdoor_number;intspeed;publicvoidpush_break(){speed=0;}publicvoidadd_oil(){…}}

classTrash_CarextendsCar{doublecapacity;publicvoidfill_trash(){…}

publicvoidpush_break(){speed=speed–10;}}1、面向?qū)ο蟮母拍?/p>

——方法的重寫重載指得是在同一個類中至少有多個方法名字、類型相同,但是參數(shù)不同。類voidshow(intint_num)voidshow(doubledouble_num)voidshow(intint_num,floatfloat_num)1231.23123,1.231、面向?qū)ο蟮母拍?/p>

——方法的重載(多態(tài)性)類、方法、變量定義的語法規(guī)范對象的創(chuàng)建和使用繼承、重寫、重載、多態(tài)等概念內(nèi)嵌類(innerclass)2、Java中的類、方法和變量2、面向?qū)ο蟮膶崿F(xiàn)

Java中的類、方法和變量

類的嚴格定義及修飾字類的修飾字:[public][abstract|final]

缺省方式為friendly[類的修飾字]class類名稱[extends父類名稱][implements接口名稱列表]{

變量定義及初始化;方法定義及方法體;}類體,其中定義了該類中所有的變量和該類所支持的方法,稱為成員變量和成員方法。[變量修飾字]

變量數(shù)據(jù)類型變量名1,變量名2[=變量初值]…;

變量的定義及修飾字[public|protected|private][static][final][transient][volatile]成員變量的類型可以是Java中任意的數(shù)據(jù)類型,包括簡單類型,類,接口,數(shù)組。2、Java中的類、方法和變量

——變量定義的語法規(guī)范成員變量的作用范圍是定義它的類。[方法修飾字]

返回類型方法名稱(參數(shù)1,參數(shù)2,…)[throwsexceptionList]{…(statements;)//方法體:方法的內(nèi)容}方法的定義及修飾字[public|protected|private][static][final|abstract][native][synchronized]

返回類型可以是任意的Java數(shù)據(jù)類型,當一個方法不需要返回值時,返回類型為void。2、Java中的類、方法和變量

——方法定義的語法規(guī)范

參數(shù)的類型可以是簡單數(shù)據(jù)類型,也可以是引用數(shù)據(jù)類型(數(shù)組、類或接口),參數(shù)傳遞方式是值傳遞。

方法體是對方法的實現(xiàn)。它包括局部變量的聲明以及所有合法的Java指令。局部變量的作用域只在該方法內(nèi)部。一個簡單的類classCar{intcar_number;voidset_number(intcar_num){car_number=car_num;}voidshow_number(){System.out.println(“MycarNo.is:”+car_number);}}classCarDemo{publicstaticvoidmain(Stringargs[]){CarDemocar=newCar();DemoCar.set_number(3838);DemoCar.show_number();}}MycarNo.is:38382、Java中的類、方法和變量

——一個簡單的類(1)對象的生成通過new操作符生成一個對象;例如:

CarBenz,; Benz=newCar();CarBWM=newCar();2、Java中的類、方法和變量

——對象(2)對象的構造過程為對象開辟空間,并對對象的成員變量進行缺省的初始化;對成員變量進行指定的初始化;調(diào)用構造方法。(3)對象的使用利用對象,通過運算符

·可以實現(xiàn)對變量的訪問和方法的調(diào)用。例如:

BirthDatelily=newBirthDate(); intday; day=lily.day; //引用lily的成員變量day lily.tomorrow(); //調(diào)用lily的方法tomorrow()2、Java中的類、方法和變量

——對象

類的繼承classCar{intcar_number;voidset_number(intcar_num){car_number=car_num;}voidshow_number(){System.out.println(“MycarNo.is:”+car_number);}}2、Java中的類、方法和變量

——繼承classTrashCarextendsCar{intcapacity;voidset_capacity(inttrash_car_capacity){capacity=trash_car_capacity;}voidshow_capacity(){System.out.println(“Mycapacityis:”+capacity);}}2、Java中的類、方法和變量

——繼承Car是父類,TrashCar是子類。TrashCar中繼承了Car中的兩個方法,同時又增加了兩個新方法。classCarDemo{publicstaticvoidmain(Stringargs[]){TrashCardemoTrashCar=newTrashCar();

demoTrashCar.set_number(4949);demoTrashCar.show_number();demoTrashCar.set_capacity(20);demoTrashCar.show_capacity();}}繼承的方法新增加的方法2、Java中的類、方法和變量

——繼承

繼承性是面向?qū)ο蟪绦蛟O計語言的另一基本特征,通過繼承可以實現(xiàn)代碼的復用。2、Java中的類、方法和變量

——繼承如果缺省extends子句,則該類為java.lang.Object的子類。通過在類的聲明中加入extends子句來創(chuàng)建一個類的子類:classSubClassextendsSuperClass{……}Java中不支持多重繼承。繼承而得到的類為子類,被繼承的類為父類,父類包括所有直接或間接被繼承的類。何時選擇繼承?一個很好的經(jīng)驗:“B是一個A嗎?”如果是則讓B做A的子類.例:研究生是學生嗎?那么研究生就是學生的子類2、Java中的類、方法和變量

——繼承常犯的錯誤A有一個B嗎?例如讓汽車輪子成為汽車的子類是錯誤的例:研究生是people嗎?那么研究生就是people的子類繼承后得到的類應該是同一類

類方法的重寫方法重寫即指在子類中重新定義父類中已有的方法。classCar{intcolor_number;intdoor_number;intspeed;publicvoidpush_break(){speed=0;}publicvoidadd_oil(){…}}

classTrash_CarextendsCar{doublecapacity;publicvoidfill_trash(){…}

publicvoidpush_break(){speed=speed–10;}}2、Java中的類、方法和變量

——重寫

重寫方法的調(diào)用對于重寫的方法,Java運行時系統(tǒng)根據(jù)調(diào)用該方法的實例的類型來決定選擇哪個方法調(diào)用。publicclassDemoCar{publicstaticvoidmain(Stringargs[]){ CaraCar=newTrash_Car(); aCar.push_break();}}在這里,類Trash_Car中的push_break()方法將被調(diào)用。2、Java中的類、方法和變量

——重寫方法重寫時應遵循的原則(1)重寫后的方法不能比被重寫的方法有更嚴格的訪問權限。(2)重寫后的方法不能比被重寫的方法產(chǎn)生更多的例外。2、Java中的類、方法和變量

——重寫例:washtheshirt

washthecar

washthedog

我們通過判斷被wash的物體知道該用哪種方法來wash早期語言,比如C語言,不同的函數(shù)不能通用,導致

shirtWash(shirt)

carWash(car)

dogWash(dog)2、Java中的類、方法和變量

——重載

類方法的重載方法重載即指多個方法可以享有相同的名字。但是這些方法的參數(shù)必須不同,或者是參數(shù)個數(shù)不同,或者是參數(shù)類型不同。2、Java中的類、方法和變量

——重載

例如,要打印不同類型的數(shù)據(jù),int,float,String,不需要定義不同名的方法:

printInt(int);printFloat(float);printString(String)。

利用方法重載,只需要定義一個方法名:println(),接收不同的參數(shù):

println(int);println(float);println(String);例:classWash{voidwash(Cloth

shirt){……}

voidwash(Auto

car){……}voidwash(Animal

dog,intn){……}

}2、Java中的類、方法和變量

——重載動態(tài)綁定:例:調(diào)用wash方法,所有名字為wash的方法都會被找出來。

wash(Clothshirt)wash(Autocar)wash(Animaldog,intn)2、編譯器根據(jù)調(diào)用時的實參值,選擇所調(diào)用的方法,例:wash(benz)2、Java中的類、方法和變量

——動態(tài)綁定

多態(tài)性類方法的重載是一種多態(tài)性。除此之外,多態(tài)性還可以是指在程序中需要使用父類對象的地方,都可以用子類對象來代替。 2、Java中的類、方法和變量

——多態(tài)性例如:publicclassEmployeeextendsObject{……}publicclassManagerextendsEmployee{……}則:Employeee=newManager();//合通過instanceof可以判斷所引用的對象實例的實際類型??梢杂梅椒▉韺崿F(xiàn)對成員變量的隱藏:

設置變量方法:setVariable()

獲取變量方法:getVariable()classSample{ protectedintx; ……

voidsetX(intvar) { x=var; } intgetX() { returnx; } ……}2、Java中的類、方法和變量

——成員變量的隱藏在Java語言中,提供了操作符instanceof用來判斷對象是否屬于某個類的實例。publicvoidmethod(Employeee){if(einstanceofManager){…//dosomethingasaManager}elseif(einstanceofContractor){ …//dosomethingasaContractor}else{ …//dosomethingelse}}2、Java中的類、方法和變量

——對象狀態(tài)的確定EmployeeManagerContractor2、Java中的類、方法和變量

——內(nèi)嵌類(innerclass)在一個類的內(nèi)部聲明的類,稱為內(nèi)嵌類。publicclassS{

inta=10;

...//codeforS'smethodspublicvoidp(){returnnewT();}classT{intc=a+10;publicbooleanh(){return(c>=0);}}}

內(nèi)嵌類只能在包含它的類中使用,同時它可以看作是該包含類的一段特殊代碼,可以直接使用該包含類的變量和方法。內(nèi)嵌類編譯后也會形成一個單獨的class,但它附屬于其包含類。3、Java名字空間及訪問規(guī)則--Java的修飾符每個類都擁有自己的名字空間,即指類及其方法和變量可以使用的范圍即作用域,通過修飾符完成這種限定。對類而言:abstract類:不能直接產(chǎn)生屬于這個類的對象;public類:不但可以被同一程序包(package)中的其它類使用,別的程序包中的類也可以使用;friendly類(缺省,包訪問類):只能被本程序包中的其它類使用,不能被別的程序包中的類使用。final類:不能被其他任何類所繼承(安全的考慮);當一個類可以被訪問時,對類內(nèi)的成員變量和成員方法而言,其作用域可以通過不同的修飾詞施以限定。

3、Java名字空間及訪問規(guī)則private:public:

protected:

friendly(default,前邊沒有修飾字的情況):a.private我是自私的,別碰我!!!私有變量或私有方法只能在定義它的類中使用classSundae{

privateSundae(){}staticSundaemakeASundae(){returnnewSundae();}}

publicclassIceCream{publicstaticvoidmain(String[]args){Sundaex=newSundae();//errorSundaex=Sundae.makeASundae();}}a.privateclassSundae{privateSundae(){}staticSundaemakeASundae(){returnnewSundae();}publicstaticvoidmain(String[]args){

Sundaex=newSundae();//okSundaex=Sundae.makeASundae();}}a.private

b.public公有變量或公有方法在任何其它類中都可以訪問我有,你有,全都有!!!packagec05.dessert;

publicclassCookie{

publicCookie(){System.out.println("Cookieconstructor");}

void

bite(){System.out.println("bite");}}同一個包、不同的包中的類importc05.dessert.*;

publicclassDinner{publicDinner(){System.out.println("Dinnerconstructor");}publicstaticvoidmain(String[]args){Cookiex=newCookie();x.bite();//Can'taccess}}b.public不用修飾符修飾的變量和方法稱為友好變量和友好方法,可以在同一包中的不同類之間訪問c.friendlypackagec05.dessert;

publicclassCookie{

publicCookie(){System.out.println("Cookieconstructor");}

voidbite(){System.out.println("bite");}}有事您call我,誰讓咱們是朋友呢!!!packagec05.dessert;publicclassDinner{publicDinner(){System.out.println("Dinnerconstructor");}publicstaticvoidmain(String[]args){Cookiex=newCookie();x.bite();//Canaccess}}tected當子類和父類不在同一個包時,子類可以訪問父類中的protected成員packagec05.dessert;

publicclassCookie{

publicCookie(){System.out.println("Cookieconstructor");}

voidbite(){System.out.println("bite");}}

我真想獨立,摸摸兜里沒有多少錢!!!如果兩個類是繼承關系,protected就相當于public,否則相當于friendlyimportc05.dessert.*;

publicclassChocolateChipextendsCookie{publicChocolateChip(){System.out.println("ChocolateChipconstructor");}publicstaticvoidmain(String[]args){ChocolateChipx=newChocolateChip();

x.bite();//Can'taccessbite}}tectedpackagec05.dessert;

publicclassCookie{publicCookie(){System.out.println("Cookieconstructor");}

Protectedvoidbite(){System.out.println("bite");}}

tectedimportc05.dessert.*;

publicclassChocolateChipextendsCookie{publicChocolateChip(){System.out.println("ChocolateChipconstructor");}publicstaticvoidmain(String[]args){ChocolateChipx=newChocolateChip();

x.bite();//Canaccessbite}}

tected例:classTom{publicStringname;privatefloatwage;intage;…………}

classJerry{

voidg()

{Tomcat=newTom();

=“jitty”;//合法//

cat.wage=4300.00f;//不合法//cat.age=34;//若Tom和Jerry的在同一包中是合法的//方法和變量是一樣的3、Java名字空間及訪問規(guī)則

同一個類中同一個包中不同包中的子類不同包中的非子類(任意類)

private ★ default ★ ★ protected ★ ★ ★ public ★ ★ ★ ★ 當子類中的變量名與父類的相同,父類的變量被遮蓋。classA { intdata_a=3; } 3、Java名字空間及訪問規(guī)則classBextendsA{intdata_a=5; }classCextendsB{voidprint_out(){System.out.println(“data_a=”+data_a);}}classdemo{publicstaticvoidmain(Stringargs[]){Cc=newC();c.print_out();}}data_a=53、Java名字空間及訪問規(guī)則

——final:到此為止final在類之前表示該類是最終類,不能再被繼承。final在方法之前表示該方法是最終方法,該方法不能被任何派生的子類重寫。final在變量之前表示變量的值在初始化之后就不能再改變;相當于定義了一個常量。static在變量或方法之前,稱為類方法(靜態(tài)方法)或類變量(靜態(tài)變量)。若無static修飾,則是實例方法和實例變量。對象共享靜態(tài)變量的存貯空間classEx{chardata;staticints_data;}classDemo{Exa,b,c,d;}3、Java名字空間及訪問規(guī)則

——static:類變量和類方法a=newEx();b=newEx();c=newEx();d=newEx();adataas_databdatacdataddata,d,c,b類變量的生存期不依賴于對象,相當于C語言中全局變量的作用。通過類名訪問它們。publicclassStaticVar{ publicstaticintnumber=5;}publicclassOtherClass{ publicvoidmethod() { intx=StaticVar.number; }}3、Java名字空間及訪問規(guī)則

——static:類變量和類方法類方法則相當于C語言中的全局函數(shù),其他的類也可以直接通過類名來訪問類方法。(Java程序的入口方法main()就是一個類方法)publicclassGeneralFunction{ publicstaticintaddUp(intx,inty) { returnx+y; }}publicclassUseGeneral{ publicvoidmethod() { inta=9; intb=10; intc=GeneralFunction.addUp(a,b); }}3、Java名字空間及訪問規(guī)則

——static:類變量和類方法注意:1.同一個類的實例方法可以訪問該類的類變量和類方法;3、Java名字空間及訪問規(guī)則

——static:類變量和類方法

討論:鑒于類變量和類方法的這種存貯特性和訪問特性,什么樣的方法和變量設計成靜態(tài)更合適呢?2.而類方法只能訪問該類的類變量和類方法,不能直接訪問實例的變量和方法。

不正確的引用classStaticError{Stringmystring=“hello”;publicstaticvoidmain(Stringargs[]){System.out.println(mystring);}}3、Java名字空間及訪問規(guī)則

——static:類變量和類方法編譯時錯誤信息:nonstaticvariablemystringcannotbereferencedfromastaticcontext“System.out.println(mystring);”。為什么不正確:靜態(tài)方法訪問了非靜態(tài)變量。解決的辦法1.將變量改成類變量classNoStaticError{

staticStringmystring=“hello”;publicstaticvoidmain(Stringargs[]){System.out.println(mystring);}}3、Java名字空間及訪問規(guī)則

——static:類變量和類方法解決的辦法2.先創(chuàng)建一個類的實例classNoStaticError{Stringmystring=“hello”;publicstaticvoidmain(Stringargs[]){

NoStaticErrornoError;noError=newNoStaticError();System.out.println(noError.mystring);}}3、Java名字空間及訪問規(guī)則

——static:類變量和類方法4、Java中的抽象類、接口和程序包

——抽象類與抽象方法抽象類:用abstract關鍵字來修飾一個類時,該類叫做抽象類;抽象類必須被繼承。抽象類不能被直接實例化。它只能作為其它類的超類,這一點與最終類(final類)正好相反。抽象方法:用abstract來修飾一個方法時,該方法叫做抽象方法。抽象方法必須被重寫抽象方法只有聲明,不能有實現(xiàn)。定義了抽象方法的類必須是抽象類。abstractreturnType

abstractMethod([paramlist]);兩個類Circle和Rectangle,完成相關參數(shù)的計算classRectangle{publicfloatwidth,height;Rectangle(floatw,floath){width=w;//這里不需"this"height=h;}publicfloatarea(){returnwidth*height;}}classCircle{publicfloatr;Circle(floatr){this.r=r;//this指"這個對象的"}publicfloatarea(){return3.14*r*r;}}4、Java中的抽象類、接口和程序包

——抽象類與抽象方法假設有若干個Circle,以及若干個Rectangle,希望計算它們的總面積,直截了當?shù)淖龇ㄊ菍⑺鼈兎謩e放到兩個數(shù)組中,用兩個循環(huán),用加法,這種做法是不漂亮的。4、Java中的抽象類、接口和程序包

——抽象類與抽象方法如果還有其它形狀:Triangle,Ellipses等,上述方法更顯得“累贅”。我們希望有一種統(tǒng)一的表示,例如用一個數(shù)組shape[],接受所有的形狀,然后用:for(i=0;i<shape.length;i++){area_total+=shape[i].area();}abstractclassShape{abstractfloatarea();}classRectangleextendsShape{publicfloatwidth,height;Rectangle(floatw,floath){width=w;//這里不需"this"height=h;}publicfloatarea(){returnwidth*height;}}classCircleextendsShape{publicfloatr;Circle(floatr){this.r=r;//this指"這個對象的"}publicfloatarea(){return3.14*r*r;}}4、Java中的抽象類、接口和程序包

——抽象類與抽象方法

接口(interface)就是方法定義和常量值的集合。從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有方法的實現(xiàn)。4、Java中的抽象類、接口和程序包

——接口接口的定義:[public]interfaceinterfaceName[extendsSuperInterfaceList]{ …… //常量定義和方法定義}interfaceCollection{ intMAX_NUM=100; voidadd(Objectobj); voiddelete(Objectobj); Objectfind(Objectobj); intcurrentCount();}4、Java中的抽象類、接口和程序包

——接口例:接口的定義1.用implements子句來表示一個類使用某個接口。4、Java中的抽象類、接口和程序包

——接口的使用3.在類體中可以使用接口中定義的常量,而且必須實現(xiàn)接口中定義的所有方法。

2.利用接口可實現(xiàn)多重繼承,即一個類可以使用多個接口,在implements子句中用逗號分隔。

4.接口的作用和抽象類相似,只定義原型,不直接定義方法的內(nèi)容。5.接口中的方法和變量必須是public的。interfaceCollection{ intMAX_NUM=100; voidadd(Objectobj); voiddelete(Objectobj); Objectfind(Objectobj); intcurrentCount();}classFIFOQueueimplementsCollection{ voidadd(Objectobj) {

…… }

voiddelete(Objectobj) { …… }

Objectfind(Objectobj) { …… }

intcurrentCount() { …… }}4、Java中的抽象類、接口和程序包

——接口主要用法:在后面介紹的事件驅(qū)動編程中,對發(fā)生事件的響應就是通過使用接口來實現(xiàn)的4、Java中的抽象類、接口和程序包

——接口例:publicclassInterfaceTestimplementsActionListener{Buttonbutton=newButton();

…….button.addActionListener(this)

……publicvoidactionPerformed(ActionEvente){………..}}4、Java中的抽象類、接口和程序包

——接口

由于Java編譯器為每個類生成一個字節(jié)碼文件,且文件名與類名相同,因此同名的類有可能發(fā)生沖突。4、Java中的抽象類、接口和程序包

——程序包(類包)為了解決這一問題,Java采用包機制來管理類名空間。

Java的程序包和C語言中的庫函數(shù)有些相似。一、

打包4、Java中的抽象類、接口和程序包

——程序包(類包)1.Java中用package語句來將一個Java源文件中的類打成一個包。它的格式為:packagepkg1[.pkg2[.pkg3…]];3.package語句作為Java源文件的第一條語句,指明該文件中定義的類所在的包。(若缺省該語句,則指定為無名包,也叫默認包)。4、Java中的抽象類、接口和程序包

——程序包(類包)Square.javapackagemyclass.graphics;classSquare{…;}classCircle{…;}classTriangle{…;}思考:Square.class、Circle.class和Triangle.class會存放在硬盤上的什么位置?

4.Java編譯器把包對應于文件系統(tǒng)的目錄管理,package語句中,用.來指明目錄的層次。packagemyclass.graphics;

這條語句指定這個包中的文件存儲在目錄path/myclass/graphics下。4、Java中的抽象類、接口和程序包

——程序包(類包)包層次的根目錄path是由環(huán)境變量CLASSPATH來確定的。classpath=.;d:\jdk1.7\lib;當前文件夾

編譯和生成包在前面Square.java中已定義了

myclass.graphics,編譯時可以采用如下方式:javac[-ddestpath]Square.java4、Java中的抽象類、接口和程序包

——程序包(類包)則編譯器會自動在destpath目錄下建立子目錄myclass/graphics

,并將生成的.class文件都放到destpath/myclass/graphics下。。destpath應該是環(huán)境變量CLASSPATH中的一個。

為了能使用Java中已提供的類,我們需要用import語句來引入所需要的類。importpackage1[.package2…].(classname|*);例如:importmyclass.graphics.*;importjava.io.*;由環(huán)境變量CLASSPATH確定4、Java中的抽象類、接口和程序包

——程序包(類包)myclasspathSquaregraphics二、類的導入5、對象的構造方法

構造方法具有和類名相同的名稱,而且沒有返回值。系統(tǒng)在產(chǎn)生對象時會自動執(zhí)行。

構造方法應包含的內(nèi)容:1.

定義一些初值或內(nèi)存配置工作;

構造方法(Constructor)是一種特殊的方法。Java中的每個類都有構造方法,用來初始化該類的一個新的對象。

2.一個類可以有多個構造方法(重載),根據(jù)參數(shù)的不同決定執(zhí)行哪一個;3.如果程序中沒有定義構造方法,則創(chuàng)建實例時使用的是缺省構造方法,它是一個無內(nèi)容的空方法。5、對象的構造方法publicclassEmployee{privateStringname;privateintsalary;publicEmployee(Stringn,ints){ name=n;//為成員變量置初值 salary=s;}publicEmployee(Stringn){

this(n,0);//對重載的構造方法的調(diào)用

}publicEmployee(){

this(“Unknown”);}}thisclassThisClass{publicstaticvoidmain(){Bankbank=newBank();bank.someMethod(this);}}classCircle{intr;Circle(intr){

this.r=r;}publicarea(){returnr*r*3.14;}}5、對象的構造方法this指向自己的引用,它的一個主要作用是要將自己這個對象當作參數(shù),傳送給別的對象中的方法。supersuper指這個對象的父類。super可以用來引用父類中的(被重寫的)方法、(被隱藏的)變量及構造方法。publicclassappleextendsfruits{publicapple(intprice){super(price);//調(diào)用父類r構造方法

super.var=value;//調(diào)用父類的變量super.method(paraList);//調(diào)用父類中定義的普通方法}}以上程序表示使用父類的構造方法生成實例,super必須是子類構造方法的第一條語句。5、對象的構造方法構造方法的執(zhí)行classGame{Game(inti){System.out.println("Gameconstructor"+i);}Game(){System.out.println("noparameterGameconstructor");}}classBoardGameextendsGame{BoardGame(inti){System.out.println("BoardGameconstructor"+i);}BoardGame(){System.out.println("noparameterBoardGameconstructor");}

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論