第三講 Java面向?qū)ο缶幊蘝第1頁(yè)
第三講 Java面向?qū)ο缶幊蘝第2頁(yè)
第三講 Java面向?qū)ο缶幊蘝第3頁(yè)
第三講 Java面向?qū)ο缶幊蘝第4頁(yè)
第三講 Java面向?qū)ο缶幊蘝第5頁(yè)
已閱讀5頁(yè),還剩100頁(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)介

第三章JAVA面向?qū)ο缶幊?**溫故***Java程序數(shù)據(jù)類(lèi)型運(yùn)算符和表達(dá)式語(yǔ)句本講要點(diǎn)面向?qū)ο缶幊痰幕A(chǔ)類(lèi)的定義對(duì)象的創(chuàng)建與使用創(chuàng)建對(duì)象使用對(duì)象訪問(wèn)權(quán)限Static關(guān)鍵字一、面向?qū)ο缶幊痰幕A(chǔ)類(lèi)和對(duì)象類(lèi)是定義對(duì)象的模板,用來(lái)描述一類(lèi)事物的共有屬性和功能。對(duì)象是一個(gè)具體的事物。例:汽車(chē)類(lèi)—某輛汽車(chē)學(xué)生類(lèi)—某個(gè)學(xué)生窗口類(lèi)—某個(gè)具體的窗口汽車(chē)(類(lèi))品牌型號(hào)顏色----------加速與減速設(shè)計(jì)轉(zhuǎn)向設(shè)計(jì)剎車(chē)設(shè)計(jì)……這輛汽車(chē)(對(duì)象)品牌:保時(shí)捷型號(hào):980顏色:灰色-------------------加速減速控制轉(zhuǎn)向控制剎車(chē)控制

類(lèi)是Java語(yǔ)言中的一種復(fù)合數(shù)據(jù)類(lèi)型,是組成Java程序的基本要素。Java的類(lèi)具有兩種基本成分:數(shù)據(jù)和行為(狀態(tài)和方法)。類(lèi)的這兩種成分被封裝在類(lèi)體中,與外界隔開(kāi)。1、類(lèi)的結(jié)構(gòu)例:publicclassHelloWorld//類(lèi){

Stringstr=“Helloworld”;//狀態(tài),或叫成員變量publicstaticvoidmain(String[]args)//方法,或叫成員方法 { System.out.println(“Helloworld!!”); }}類(lèi)的封裝2、類(lèi)的定義類(lèi)首:類(lèi)的修飾符有:public、abstract、final……extends父類(lèi)名:表示所定義的類(lèi)由“父類(lèi)”繼承而來(lái)。implements接口列表:該類(lèi)對(duì)指定接口進(jìn)行實(shí)現(xiàn)。{[類(lèi)成員變量聲明] [類(lèi)方法聲明]}類(lèi)體:構(gòu)造方法成員方法[修飾符]class類(lèi)名[extends父類(lèi)名][implements接口列表]publicclassPerson{

floatheight,weight; Stringname,peoNumber,nationality

publicPerson(Stingnationality){this.nationality=nationality;}

voidsetName(Stringname){ =name;}

voidspeak(Strings){ System.out.println(s);}}(1)成員變量與局部變量成員變量:是類(lèi)的數(shù)據(jù)成分,在類(lèi)體中直接定義,定義格式為:[修飾符]變量類(lèi)型成員變量名列表;修飾符:public、private、protected、final、static等,用來(lái)標(biāo)識(shí)變量的使用范圍和性質(zhì)。局部變量:在方法體內(nèi)定義的變量和方法的參數(shù)是局部變量。局部變量名可以和成員變量名重名,此時(shí)局部變量會(huì)隱藏成員變量,如果想在該方法內(nèi)部使用成員變量,使用關(guān)鍵字this。(2)構(gòu)造方法的說(shuō)明說(shuō)明形式如下:

[構(gòu)造方法修飾符]方法名([形式參數(shù)列表])

{方法體}⑴構(gòu)造方法的名字與類(lèi)的名字相同⑵構(gòu)造方法沒(méi)有返回類(lèi)型(千萬(wàn)不要將返回值類(lèi)型聲明為void。也不能在方法內(nèi)部使用return返回一個(gè)值。)

⑶構(gòu)造方法是在創(chuàng)建對(duì)象時(shí),系統(tǒng)自動(dòng)為所創(chuàng)建的對(duì)象初始化化的方法。實(shí)際上Java語(yǔ)言為每一個(gè)類(lèi)提供了一個(gè)默認(rèn)的構(gòu)造方法,也就是說(shuō),每個(gè)類(lèi)都有構(gòu)造方法。如果不定義一個(gè)構(gòu)造方法,Java語(yǔ)言將調(diào)用它提供的默認(rèn)的構(gòu)造方法對(duì)一個(gè)新的對(duì)象進(jìn)行初始化(3)成員方法成員方法是類(lèi)的行為成分,聲明格式如下:[修飾符]返回值類(lèi)型方法名([形參列表]){ [方法體] [return表達(dá)式;]}classTriangle{ floatsideA,sideB,sideC,lengthSum; voidsetSide(floatsideA,floatsideB,floatsideC){ this.sideA=sideA; this.sideB=sideB; this.sideC=sideC; }}1、修飾符:public、private、protected、static、final……2、如果方法沒(méi)有返回值,則使用void關(guān)鍵字。如果有返回值類(lèi)型,則方法體中必須有return語(yǔ)句,并且表達(dá)式類(lèi)型與方法類(lèi)型一致。3、形式參數(shù)列表的形式如下: 類(lèi)型名

形參名1,類(lèi)型名形參名2,……類(lèi)的定義--例1classPerson{

Stringname,sex; intage; voidsing() { System.out.println("Icansing!"); } voiddance() { System.out.println("Icandance!"); } voidout()//成員變量的操作只能放在方法中 { System.out.println("name:"+name); System.out.println("age:"+age); } }定義描述“人”的類(lèi):成員變量:姓名、性別、年齡;成員方法:唱歌,跳舞,輸出classPerson{

Stringname,sex;intage;

publicPerson(){ age=18; name="無(wú)名";} publicPerson(Stringname){ =name;}voidsing(){ System.out.println("Icansing!");} voiddance(){ System.out.println("Icandance!");} voidout(){ System.out.println("name:"+name); System.out.println("age:"+age);} }定義描述“人”的類(lèi):成員變量:姓名、性別、年齡;成員方法:唱歌,跳舞,輸出構(gòu)造方法:對(duì)成員變量賦初值類(lèi)的定義--例2:梯形類(lèi)classLadder{

floata,b,h;

Ladder(floata,floatb){this.a=a;this.b=b;}voidsetH(floath){ this.h=h;} floatcalculatArea(){ return(a+b)*h/2;}}定義描述梯形類(lèi):成員變量:上底、下底、高成員方法:設(shè)置高,計(jì)算面積構(gòu)造方法:對(duì)上下底賦初值2、創(chuàng)建和使用對(duì)象如何調(diào)用類(lèi)中定義的成員變量和成員方法,在Java中類(lèi)只有實(shí)例化為對(duì)象后才能被使用(注:main方法為特殊方法,由系統(tǒng)調(diào)用),對(duì)象的使用“分三步走”:(1)聲明對(duì)象:類(lèi)名對(duì)象名;如:Personp(2)分配內(nèi)存(對(duì)象的實(shí)例化)

對(duì)象名=new類(lèi)構(gòu)造方法名([實(shí)參表]);如:p=newPerson();(3)使用對(duì)象(對(duì)象的成員變量及方法的訪問(wèn))

對(duì)象名.方法名、對(duì)象名.成員變量名如:p.agep.out()(1)聲明和(2)初始化可以合并:類(lèi)名對(duì)象名=new類(lèi)的構(gòu)造方法名([實(shí)參表]);如:Personp=newPerson();使用對(duì)象—例3方法一:在同一個(gè)類(lèi)中使用對(duì)象classPerson{ . . . publicstaticvoidmain(String[]args) { Personp; p=newPerson(); ="zhangsan"; p.age=20; p.sing(); p.out(); } }棧內(nèi)存堆內(nèi)存p0x30000x30000age...newperson()產(chǎn)生的對(duì)象使用對(duì)象—例4方法二:在不同類(lèi)中使用對(duì)象classPerson{ . . .}classPersonTest{ publicstaticvoidmain(String[]args) { Personp; p=newPerson(); ="zhangsan"; p.age=20; p.sing(); p.out(); }}使用對(duì)象—例5梯形classLadder{ . . .publicstaticvoidmain(String[]args){ floatarea; Ladderladder=newLadder(); ladder.a=10.0f; ladder.b=20.0f; ladder.setH(5f); area=ladder.calculatArea(); System.out.println("area="+area);}}Java程序classLadder{ floata,b,h; voidsetH(floath) { this.h=h; } floatcalculatArea() { return(a+b)*h/2; }}PublicclassLadderTest{publicstaticvoidmain(String[]args){ floatarea; Ladderladder=newLadder(); ladder.a=10.0f; ladder.b=20.0f; ladder.setH(5f); area=ladder.calculatArea(); System.out.println("area="+area);}}}對(duì)象變量的賦值classPersonTest{ publicstaticvoidmain(String[]args) { Personp1,p2,p3; p1=newPerson(); p2=newPerson("孫悟空"); p3=newPerson("豬八戒"); p1=p2; =“唐僧”;p1.age=50; p1.out();p2.out();p3.out(); } }結(jié)果如何?對(duì)象變量的賦值,是對(duì)象中保存的地址發(fā)生的變化如果一個(gè)對(duì)象沒(méi)有任何變量引用它,則它成為垃圾內(nèi)存。3、訪問(wèn)權(quán)限用一個(gè)類(lèi)創(chuàng)建一個(gè)對(duì)象后,通過(guò)對(duì)象可以訪問(wèn)這個(gè)類(lèi)的成員變量和成員方法,但這種訪問(wèn)是有一定限制的。這種限制取決于在聲明變量和成員方法時(shí)使用的修飾符:public、private、protected、友好(未使用修飾符)。(1)private變量和方法訪問(wèn)權(quán)限最小,只能在同一個(gè)類(lèi)中被訪問(wèn)。同一個(gè)類(lèi)的方法中直接訪問(wèn)。同一個(gè)類(lèi)的對(duì)象也可以引用本類(lèi)的私有成員。不能在另一個(gè)類(lèi)中引用(2)友好變量和方法不使用修飾符:public、private、protected,即缺省這些修飾符的情況。比private權(quán)限級(jí)別高一級(jí)友好成員只能被同類(lèi)或同包中的不同類(lèi)引用。classPerson{ privateintage; privateStringname;Stringsex;

privatevoidout(){ System.out.println(name+“年齡:”+age+“歲");}

voidsetAge(intage){this.age=age;}publicstaticvoidmain(String[]args){Persontom=newPerson();="湯姆“; tom.age=20;//或tom.setAge(20); tom.out(); }}例6:classPersonTest{ publicstaticvoidmain(String[]args){ Personmarry=newPerson(); =“瑪麗”//非法使用變量namemarry.age=20;//非法引用變量age marry.out();//非法調(diào)用方法out()

marry.sex=“女”//合法使用變量sexmarry.setAge=20;//合法調(diào)用方法setAge

}}(3)protected變量和方法比友好成員高一級(jí),比public低一級(jí)。不能在不同包的類(lèi)中被引用。如果不同包中的類(lèi)是本類(lèi)的子類(lèi),則子類(lèi)的對(duì)象可以引用本類(lèi)的受保護(hù)成員。(4)public變量和方法訪問(wèn)權(quán)限最大,可以在不同類(lèi)、不同包的類(lèi)中訪問(wèn)。packageex1;publicclassArea{ privatefloatgetArea(floatr) { System.out.print("方法一:");

return3.14f*r*r; } doublegetArea(floatx,inty) { System.out.print("方法二:");

returnx*y; } protectedfloatgetArea(intx,floaty) { System.out.print("方法三:");

returnx*y; } publicdoublegetArea(floatx,floaty,floatz) { System.out.print("方法四:");

return(x+x+y*y+z*z)*2.0; }}例7(2)public變量和方法packageex2;importex1.Area;classAreaTest{ publicstaticvoidmain(String[]args){Areaa=newArea();System.out.println(a.getArea(2.0f));//不合法

System.out.println(a.getArea(2.7f,12));//不合法System.out.println(a.getArea(12,2.7f));//

合法System.out.println(a.getArea(2.0f,10,20));//合法}}(2)public變量和方法packageex2;importex1.Area;classAreaTestextendsArea{ publicstaticvoidmain(String[]args){AreaTesta=newAreaTest();System.out.println(a.getArea(2.0f));//合法

System.out.println(a.getArea(12,2.7f));//合法System.out.println(a.getArea(2.7f,12));//不合法System.out.println(a.getArea(2.0f,10,20));//不合法}}變量和方法的訪問(wèn)控制(總結(jié))publicprotected友好private同類(lèi)同包不同類(lèi)不同包子類(lèi)通用不同情形下對(duì)象訪問(wèn)說(shuō)明符4、static關(guān)鍵字靜態(tài)變量/靜態(tài)方法:對(duì)于成員變量/成員方法的聲明,可以在類(lèi)型的前面加修飾符“static”,稱(chēng)之為靜態(tài)變量/靜態(tài)方法。靜態(tài)變量/靜態(tài)方法屬于類(lèi)而不屬于類(lèi)的某個(gè)實(shí)例,可直接由類(lèi)名來(lái)調(diào)用(類(lèi)名·變量名/類(lèi)名·方法名),因此也叫類(lèi)變量/類(lèi)方法;實(shí)例變量/實(shí)例方法:非靜態(tài)的成員變量/方法必須實(shí)例化后通過(guò)對(duì)象名來(lái)調(diào)用(對(duì)象名·變量名/對(duì)象名·方法),因此稱(chēng)為實(shí)例變量/實(shí)例方法。說(shuō)明:類(lèi)變量和類(lèi)方法也可以通過(guò)實(shí)例調(diào)用。類(lèi)變量,它屬于類(lèi)所有,且在所有的實(shí)例中都共享同一個(gè)內(nèi)存空間;實(shí)例變量,對(duì)于每一個(gè)實(shí)例,這個(gè)變量都擁有獨(dú)自的內(nèi)存空間。類(lèi)方法,在類(lèi)加載時(shí)分配方法入口地址,因此可被類(lèi)直接調(diào)用。實(shí)例方法,只有創(chuàng)建類(lèi)的對(duì)象,才會(huì)分配方法入口地址,并只能通過(guò)對(duì)象調(diào)用方法。(1)類(lèi)變量/類(lèi)方法、實(shí)例變量/實(shí)例方法classStaticDemo{staticintx;inty;publicstaticintgetX(){ returnx;}publicstaticvoidsetX(intnewX){ x=newX;}publicintgetY(){ returny;}publicvoidsetY(intnewY){ y=newY;}}0xStaticDemo入口地址getx()入口地址setx()publicclassShowDemo{publicstaticvoidmain(String[]args){System.out.println("靜態(tài)變量x="+StaticDemo.getX());

StaticDemoa=newStaticDemo();

StaticDemob=newStaticDemo();

a.setX(10);b.setX(30);

a.setY(20);b.setY(40);

System.out.println("靜態(tài)變量a.x="+a.getX());System.out.println("靜態(tài)變量b.x="+b.getX());System.out.println("靜態(tài)變量x="+StaticDemo.getX());System.out.println("實(shí)例變量a.y="+a.getY());System.out.println("實(shí)例變量b.y="+b.getY());

}}例8:內(nèi)存模型分析實(shí)例變量0a.y0xStaticDemo0b.y10x30x20a.y40b.y總結(jié)(靜態(tài)成員在使用時(shí)應(yīng)該注意):①靜態(tài)方法中只能直接調(diào)用同類(lèi)中其他靜態(tài)成員,而不能調(diào)用非靜態(tài)成員。反之,則可以。②靜態(tài)成員的引用直接通過(guò)類(lèi)名引用,也可以通過(guò)該類(lèi)的對(duì)象來(lái)引用。③靜態(tài)方法中不能使用super和this變量。例9:classA{staticinti=10;Strings="helloworld!";publicstaticvoidmain(String[]args){ System.out.println("i="+i);// System.out.println("s="+s);}}(2)static應(yīng)用注意事項(xiàng)**總結(jié)**類(lèi)的定義成員變量說(shuō)明成員方法說(shuō)明對(duì)象的創(chuàng)建和使用創(chuàng)建對(duì)象通過(guò)對(duì)象引用成員變量和成員方法構(gòu)造方法構(gòu)造方法與一般成員方法的區(qū)別構(gòu)造方法不是void型訪問(wèn)權(quán)限

private,友好,protected,publicStatic關(guān)鍵字二、面向?qū)ο缶幊踢M(jìn)階類(lèi)的繼承多態(tài)抽象類(lèi)和抽象方法接口包1、類(lèi)的繼承動(dòng)物貓狗哺乳動(dòng)物鳥(niǎo)燕子麻雀類(lèi)的定義可以是分層次的,低層的類(lèi)具有高層類(lèi)的屬性和方法,稱(chēng)高層類(lèi)為父類(lèi),低層類(lèi)為子類(lèi)。子類(lèi)使用父類(lèi)中定義的方法和變量時(shí),就像它們屬于子類(lèi)本身一樣??梢院?jiǎn)化編程的過(guò)程,有利于代碼的復(fù)用。子類(lèi)除了擁有父類(lèi)的方法和變量之外,也可以定義自己方法和變量。哺乳動(dòng)物:胎生,能用母乳喂養(yǎng)幼仔。貓:胎生,能用母乳喂養(yǎng)幼仔。會(huì)捉老鼠。1、類(lèi)的繼承(續(xù))繼承:由已有類(lèi)創(chuàng)建新類(lèi)的機(jī)制。新類(lèi)繼承已有類(lèi)的成員,并可根據(jù)需要增加自己新的成員。已有類(lèi)稱(chēng)為父類(lèi),新類(lèi)稱(chēng)為已有類(lèi)的子類(lèi)。Java不支持多繼承,一個(gè)子類(lèi)只能有一個(gè)父類(lèi),但一個(gè)父類(lèi)可以派生出若干個(gè)子類(lèi)。classPerson{Stringname;intage;Person(Stringname){ =name;}publicvoidsetAge(intage){ this.age=age;}voidout(){ System.out.println("姓名:"+name+"年齡:"+age+"歲");}}子類(lèi)(例)publicclassStudentextendsPerson{intjava,flash;Student(Stringname,intjava,intflash){ super(name); this.java=java; this.flash=flash; setAge(5000);}voidout(){ super.out(); System.out.println("java:"+java+"\tflash:"+flash);

}voidlearn(){ System.out.println(name+"islearning");}publicstaticvoidmain(String[]args){ Students=newStudent("孫悟空",80,80); s.out(); s.learn();}}1、類(lèi)的繼承性(續(xù))子類(lèi)和父類(lèi)在同一包中子類(lèi)可繼承其父類(lèi)中非私有成員(不是private的成員)子類(lèi)和父類(lèi)不在同一包中子類(lèi)只能繼承受保護(hù)的和共有成員(public、protected)(1)成員變量的隱藏和方法的重寫(xiě)成員變量的隱藏:如果在子類(lèi)中定義了與父類(lèi)中同名的變量,父類(lèi)的這個(gè)變量將被隱藏。方法的重寫(xiě):如果子類(lèi)中定義了與父類(lèi)同名、同類(lèi)型、相同參數(shù)的方法,則稱(chēng)子類(lèi)覆蓋了父類(lèi)的方法。這是子類(lèi)的一種“變異”,子類(lèi)可以根據(jù)需要把從父類(lèi)繼承來(lái)的方法進(jìn)行改造。比如:在student類(lèi)中重新聲明方法out()voidout(){super.out(); System.out.println("java:"+java+"\tflash:"+flash);}(2)super關(guān)鍵字特殊變量super,提供了對(duì)父類(lèi)的訪問(wèn)。1、可以使用super訪問(wèn)父類(lèi)被子類(lèi)隱藏的變量或覆蓋的方法。如:在student類(lèi)中改寫(xiě)out方法時(shí),可以使用super.out();來(lái)調(diào)用父類(lèi)中對(duì)name和age的輸出。調(diào)用父類(lèi)的變量。2、可能通過(guò)Super([參數(shù)表])來(lái)調(diào)用父類(lèi)的構(gòu)造方法。每個(gè)子類(lèi)構(gòu)造方法的第一條語(yǔ)句,都是隱含地調(diào)用super(),如果父類(lèi)沒(méi)有這種形式的構(gòu)造函數(shù),那么在編譯的時(shí)候就會(huì)報(bào)錯(cuò)。(3)this關(guān)鍵字this關(guān)鍵字只能用在實(shí)例方法或構(gòu)造方法中,提供了對(duì)當(dāng)前對(duì)象的訪問(wèn)。voidsetAge(intage){ this.age=age;}publicstaticvoidmain(String[]args){ Personp1,p2,p3; p1=newPerson(); p2=newPerson("孫悟空");

p3=newPerson("豬八戒",300,2.8f,380); p1.setAge(18);p2.setAge(19);p3.setAge(20); p1.out();p2.out();p3.out();} (4)final類(lèi)和final成員final類(lèi):不能派生子類(lèi)。final變量,其值不能在程序運(yùn)行過(guò)程中改變,是常量。final方法,不能被子類(lèi)方法重寫(xiě)。如:publicfinalclassFather{}publicclassSonextendsFather?如:publicclassFather{finalintx=10;publicfinalvoidshow(){}}publicclassSonextendsFather{publicvoidshow(){}}(5)對(duì)象的上轉(zhuǎn)型對(duì)象父類(lèi)的變量能否引用子類(lèi)的對(duì)象?能。子類(lèi)的變量能否引用父類(lèi)的對(duì)象?不能。父類(lèi)的變量稱(chēng)為子類(lèi)對(duì)象的上轉(zhuǎn)型對(duì)象。Personp;p=newStudent();Students;s=newStudent();p=s;新增變量新增方法從父類(lèi)繼承或重寫(xiě)的變量從父類(lèi)繼承或重寫(xiě)的方法

s的上轉(zhuǎn)型對(duì)象S對(duì)象psPersonp=newStudent("唐僧",100,100);p.out();//p.learn();Studentsp=(Student)p;sp.learn();

(5)上轉(zhuǎn)型對(duì)象操作說(shuō)明上轉(zhuǎn)型對(duì)象不能操作子類(lèi)新增成員上轉(zhuǎn)型對(duì)象可以操作從父類(lèi)繼承的成員,或在子類(lèi)中重寫(xiě)的父類(lèi)成員。上轉(zhuǎn)型對(duì)象在被改寫(xiě)的成員時(shí),調(diào)用子類(lèi)成員,而非父類(lèi)成員。上轉(zhuǎn)型對(duì)象通過(guò)強(qiáng)制類(lèi)型轉(zhuǎn)換成為子類(lèi)對(duì)象。2、多態(tài)性在程序中同一符號(hào)或名字在不同情況下具有不同解釋的現(xiàn)象稱(chēng)為多態(tài)性。表現(xiàn)在兩方面:方法的重載。方法的覆蓋。(1)方法的重載在一個(gè)類(lèi)中可以定義同名的方法,但是參數(shù)的類(lèi)型和個(gè)數(shù)不能完全相同,同名的方法可以有不同的方法體從而完成不同的任務(wù),當(dāng)調(diào)用方法時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用與實(shí)際參數(shù)類(lèi)型和個(gè)數(shù)相匹配的的那一個(gè)方法,這就是方法的重載。在面向?qū)ο缶幊讨?,這種同一個(gè)名字可以有不同解釋的現(xiàn)象稱(chēng)為多態(tài)。(1)方法的重載(續(xù))在一個(gè)類(lèi)中可以有多個(gè)方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類(lèi)型不同。同名的方法可以有不同的方法體從而完成不同的任務(wù),當(dāng)調(diào)用方法時(shí),系統(tǒng)會(huì)根據(jù)調(diào)用方法的實(shí)際參數(shù)類(lèi)型和個(gè)數(shù)自動(dòng)調(diào)用相應(yīng)的方法,這就是方法的重載。classHeshang{ voiddashui(Strings) { System.out.println(s+"挑水喝"); }

voiddashui(Strings1,Strings2) { System.out.println(s1+"和"+s2+"抬水喝"); }

voiddashui(Strings1,Strings2,Strings3) { System.out.println(s1+""+s2+""+s3+"沒(méi)水喝"); }

publicstaticvoidmain(String[]args){ Heshangh=newHeshang(); h.dashui("孫悟空");

h.dashui("孫悟空","豬八戒");

h.dashui("孫悟空","豬八戒","沙和尚");}}(1)構(gòu)造方法的重載classPerson{ Stringname;intage;floatheight,weight; publicPerson() { age=18; name="無(wú)名"; }

publicPerson(Stringname) { =name; } publicPerson(Stringname,intage,floatheight,floatweight) { =name; this.age=age; this.height=height; this.weight=weight; } voidout()//成員變量的操作只能放在方法中 {

System.out.println(“姓名:”+name+“年齡:”+age+“歲”+ "身高:" +height+"米"+"體重:"+weight+"斤");

System.out.println(); }

}classPersonTest{ publicstaticvoidmain(String[]args) { Personp1,p2,p3; p1=newPerson(); p2=newPerson("孫悟空");

p3=newPerson("豬八戒",300,2.8f,380); p1.out();p2.out();p3.out(); } }(1)構(gòu)造方法的重載(續(xù))(2)子類(lèi)成員方法的覆蓋publicclassPerson{Stringname;intage;publicvoidsetAge(intage){ this.age=age;}publicvoidout(){ System.out.println("姓名:"+name+"年齡:"+age+"歲"); }}publicclassStudentextendsPerson{intjava,flash;voidlearn(){System.out.println(name+"islearning!");}voidout(){ System.out.println("姓名:"+name+"年齡:"+age+"歲"+"java:"+java+ "\tflash:"+flash);}作業(yè)與上機(jī)訓(xùn)練要求1、創(chuàng)建父類(lèi)Animal和子類(lèi)Dog要求如下:(1)Animal(父類(lèi))中定義至少兩個(gè)成員變量,一個(gè)帶參數(shù)的構(gòu)造方法,一個(gè)成員方法。(2)Dog(子類(lèi))中定義兩個(gè)以上成員變量,隱藏父類(lèi)中的一個(gè)成員變量,重寫(xiě)父類(lèi)中的一個(gè)成員方法。(3)對(duì)子類(lèi)進(jìn)行實(shí)例化,輸出對(duì)象的成員變量值(包括從父類(lèi)繼承而來(lái)的變量),調(diào)用對(duì)象的各成員方法(包括從父類(lèi)繼承來(lái)的方法)。2、按要求補(bǔ)充代碼(附下頁(yè))classZuoye2{ privatefloatr;//r為圓的半徑

/*補(bǔ)充代碼段1 */ publicfloatcircle()//計(jì)算圓的面積 { return3.14f*r*r; }}classTest{ publicstaticvoidmain(String[]args) { Zuoye2z=newZuoye2();

/*補(bǔ)充代碼段2,計(jì)算輸出半徑為10的圓的面積 */

} }技能訓(xùn)練2類(lèi)的繼承訓(xùn)練目的使學(xué)生了解類(lèi)成員的訪問(wèn)權(quán)限設(shè)置與應(yīng)用使用學(xué)生掌握子類(lèi)的創(chuàng)建,理解子類(lèi)的繼承,成員變量的隱藏與成員方法的重寫(xiě)。相關(guān)知識(shí)點(diǎn)子類(lèi)的構(gòu)造方法與父類(lèi)構(gòu)造方法之間的關(guān)系:子類(lèi)構(gòu)造方法的第一條語(yǔ)句隱含調(diào)用父類(lèi)的構(gòu)造方法—super();子類(lèi)繼承父類(lèi)中的非private成員(在同一個(gè)包中)子類(lèi)繼承父類(lèi)中的非private與非友好成員(不同的包中)子類(lèi)中的成員與父類(lèi)中成員相同,則隱藏父類(lèi)成員父類(lèi)的對(duì)象變量(對(duì)象的上轉(zhuǎn)型對(duì)象)可以引用子類(lèi)的對(duì)象技能訓(xùn)練3方法的重載、類(lèi)變量/類(lèi)方法實(shí)驗(yàn)?zāi)康淖寣W(xué)生掌握方法的重載讓學(xué)生掌握類(lèi)變量與實(shí)例變量,以及類(lèi)方法與實(shí)例方法的區(qū)別。讓學(xué)生掌握包的使用實(shí)驗(yàn)要求與內(nèi)容3、抽象方法與抽象類(lèi)用關(guān)鍵字abstract修飾的類(lèi)就是抽象類(lèi)。沒(méi)有方法體的方法,且首部用關(guān)鍵字abstract修飾,就是抽象方法。聲明抽象方法的格式:[修飾符…]abstract返回值類(lèi)型方法名([形參列表]);publicabstractclassAAnimal { publicStringname; publicintage; publicvoidprint() { System.out.println("名字:"+name); System.out.println("大小:"+age); } publicabstractvoidrun(); publicabstractvoidcry();}(1)抽象方法與抽象類(lèi)使用說(shuō)明含有抽象方法的類(lèi)必須定義為抽象類(lèi)。publicclassAAnimal //錯(cuò)誤{

publicStringname; publicintage; publicvoidprint() { System.out.println("名字:"+name); System.out.println("大小:"+age); } publicabstractvoidrun(); publicabstractvoidcry();}(1)抽象方法與抽象類(lèi)使用說(shuō)明(續(xù))不能由抽象類(lèi)直接創(chuàng)建對(duì)象。它只能做為父類(lèi)使用,由它派生的子類(lèi)必須實(shí)現(xiàn)抽象類(lèi)中所有的抽象方法,才能創(chuàng)建對(duì)象。抽象方法的實(shí)現(xiàn):子類(lèi)重寫(xiě)父類(lèi)的抽象方法,增加方法體,使之成為一個(gè)非抽象方法??梢钥諏?shí)現(xiàn)。classTest{ publicstaticvoidmain(String[]args){ AAnimala; a=newAAnimal(); //錯(cuò)誤}}classDogextendsAAnimal{ Stringtype; publicDog() { type="寵物狗"; }

publicvoidrun(){ } publicvoidcry() { System.out.println("汪汪叫"); }}classTest{ publicstaticvoidmain(String[]args){ Doga; a=newDog(); ="歡歡";a.age=2; a.print(); a.cry(); System.out.println("這是一只"+a.type);}}續(xù)(1)抽象方法與抽象類(lèi)使用說(shuō)明(續(xù))如果子類(lèi)沒(méi)有實(shí)現(xiàn)抽象基類(lèi)(父類(lèi))中所有的抽象方法,則子類(lèi)也必須定義成一個(gè)抽象類(lèi)。即:抽象的子類(lèi)也必須使用修飾符:abstract可以將沒(méi)有任何抽象方法的類(lèi)聲明為abstract,避免由這個(gè)類(lèi)直接創(chuàng)建任何的對(duì)象。abstractclassDogextendsAAnimal{ Stringtype; publicDog() { type="寵物狗"; }

//publicvoidrun(){ } publicvoidcry() { System.out.println("汪汪叫"); }}classBirdextendsAAnimal//定義鳥(niǎo)類(lèi)繼承動(dòng)物類(lèi){

publicBird()//構(gòu)造方法初始化 {

name="麻雀";

age=3; } publicvoidrun()//實(shí)現(xiàn)父類(lèi)的抽象方法 {

System.out.println("會(huì)飛"); }

publicvoidcry() { System.out.println("嘰嘰喳喳"); }}創(chuàng)建鳥(niǎo)類(lèi)對(duì)象:練習(xí)(例)鳥(niǎo)類(lèi)抽象類(lèi):圖形,抽象方法—求面積(指出:圖形必須有求面積的方法,但因?yàn)椴煌瑘D形求面積的方法不一樣,因此將此方法聲明為抽象方法)子類(lèi):梯形類(lèi),實(shí)現(xiàn)了抽象類(lèi)中求面積的抽象方法。子類(lèi):圓,實(shí)現(xiàn)了抽象類(lèi)中求面積的抽象方法。類(lèi):堆,求體積。應(yīng)用程序類(lèi):創(chuàng)建梯形、圓、堆對(duì)象,分別進(jìn)行計(jì)算。(2)小結(jié)用abstract關(guān)鍵字來(lái)修飾一個(gè)類(lèi)時(shí),這個(gè)類(lèi)叫做抽象類(lèi);用abstract來(lái)修飾一個(gè)方法時(shí),該方法叫做抽象方法。abstract類(lèi)必須被繼承,abstract方法必須被重寫(xiě)。抽象類(lèi)不能被實(shí)例化(直接創(chuàng)建對(duì)象)。抽象方法只需聲明,而不需實(shí)現(xiàn)(無(wú)方法體)。作業(yè)(三)作業(yè)二:按以下要求編寫(xiě)程序創(chuàng)建一個(gè)抽象的車(chē)類(lèi),包括各種車(chē)輛。至少包含一個(gè)抽象方法。成員變量:品牌、可載人數(shù)、輪子個(gè)數(shù)、能源等。抽象方法如:跑、加速、剎車(chē)等。通過(guò)繼承車(chē)類(lèi)重新聲明公共汽車(chē)類(lèi)和普通自行車(chē)類(lèi)。在子類(lèi)中實(shí)現(xiàn)父類(lèi)中抽象方法構(gòu)造方法對(duì)應(yīng)區(qū)分為公共汽車(chē)和普通自行車(chē)。子類(lèi)的構(gòu)造方法中根據(jù)不同的類(lèi)設(shè)置不同的默認(rèn)值,如汽車(chē)類(lèi)可以默認(rèn)輪子個(gè)數(shù)是4個(gè),可載人數(shù)50個(gè),能源為汽油。技能訓(xùn)練4訓(xùn)練目的掌握抽象類(lèi)與抽象方法的應(yīng)該技巧實(shí)驗(yàn)要求:創(chuàng)建一個(gè)抽象的車(chē)類(lèi),包括各種車(chē)輛。至少包含一個(gè)抽象方法。成員變量:品牌、可載人數(shù)、輪子個(gè)數(shù)、能源等。抽象方法如:跑、加速、剎車(chē)等。通過(guò)繼承車(chē)類(lèi)重新聲明公共汽車(chē)類(lèi)和普通自行車(chē)類(lèi)。在子類(lèi)中實(shí)現(xiàn)父類(lèi)中抽象方法構(gòu)造方法對(duì)應(yīng)區(qū)分為公共汽車(chē)和普通自行車(chē)。子類(lèi)的構(gòu)造方法中根據(jù)不同的類(lèi)設(shè)置不同的默認(rèn)值,如汽車(chē)類(lèi)可以默認(rèn)輪子個(gè)數(shù)是4個(gè),可載人數(shù)50個(gè),能源為汽油。實(shí)驗(yàn)中應(yīng)解決的問(wèn)題:含有抽象方法的類(lèi)一定是抽象類(lèi)嗎?抽象類(lèi)中一定要有抽象方法嗎?如何實(shí)現(xiàn)抽象方法?4、接口及應(yīng)用***溫故***抽象方法abstract方法,并且沒(méi)有方法體。抽象類(lèi)abstract類(lèi),一般含有抽象方法。抽象類(lèi)的一般用法只能做為父類(lèi)被繼承,不能直接實(shí)例化。只有通過(guò)子類(lèi)實(shí)現(xiàn)抽象方法后,才能實(shí)例化。一般對(duì)于不同的子類(lèi)可以有不同的實(shí)現(xiàn)過(guò)程。本講要點(diǎn)接口的基本概念接口定義接口實(shí)現(xiàn)接口應(yīng)用舉例理解接口Jar文件(略)(1)接口的概念在《ThinkinginJava》一書(shū)中,作者對(duì)接口有這樣的描述:“接口(interface)比抽象(abstract)的概念更進(jìn)了一步。你可以把一個(gè)接口看成是一個(gè)純的抽象類(lèi)?!睘槭裁词褂媒涌冢?、Java中不允許類(lèi)的多繼承,但在解決實(shí)際問(wèn)題過(guò)程中,僅僅依靠單一繼承在很多情況下都不能將問(wèn)題的復(fù)雜性表述完整。通過(guò)接口可以實(shí)現(xiàn)多繼承。如:Father類(lèi)有playFootball(),Mother類(lèi)有sing(),如果采用類(lèi)的繼承來(lái)產(chǎn)生一個(gè)Son類(lèi),則它只能從一個(gè)類(lèi)中繼承。要么繼承Father,要么繼承Mother。2、接口在面向?qū)ο蟮脑O(shè)計(jì)與編程中應(yīng)用非常廣泛,特別是實(shí)現(xiàn)軟件模塊間的連接方面有著巨大的優(yōu)勢(shì)。(2)接口的聲明及注意事項(xiàng)如果一個(gè)抽象類(lèi)中所有的方法都是抽象的,就可以將這個(gè)類(lèi)用另外一種方式來(lái)定義,也就是接口定義。[public]interface接口名[extends父接口名列表]{ 數(shù)據(jù)類(lèi)型常量名=常數(shù);

返回值方法名([參數(shù)列表]);}幾點(diǎn)說(shuō)明:1、interface是接口的關(guān)鍵字,定義接口和定義類(lèi)相似。并被編譯為class文件。2、接口的訪問(wèn)控制符只有public,如果使用public修飾符,則可以被所有類(lèi)和接口使用,且接口名與文件名相同。如果不使用public,則接口只能被同一個(gè)包中的類(lèi)和接口使用。3、接口中所有的方法都是publicabstract即公共的抽象方法。4、接口中可以有數(shù)據(jù)成員,這些數(shù)據(jù)成員默認(rèn)都是publicstaticfinal即公共類(lèi)常量。(3)接口聲明實(shí)例//Father.java文件名publicinterfaceFather//父親會(huì)踢球{ publicabstractvoidplayFootball();}//Mother.java文件名publicinterfaceMother//母親愛(ài)唱歌{ publicabstractvoidsing();}//Flyable.java能飛的動(dòng)物publicinterfaceFlyable{ publicabstractvoidfly();}//Talkable.java能說(shuō)話的動(dòng)物publicinterfaceTalkable{ publicabstractvoidtalk();}(4)接口的實(shí)現(xiàn)與多繼承接口的實(shí)現(xiàn)通過(guò)類(lèi)來(lái)完成,在定義類(lèi)時(shí)使用“implements接口名列表”短語(yǔ),并在類(lèi)體中實(shí)現(xiàn)接口中的抽象方法。接口和實(shí)現(xiàn)類(lèi)之間的關(guān)系實(shí)質(zhì)上是繼承的關(guān)系1、一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口,從而實(shí)現(xiàn)多繼承。publicclassSmartChild

implementsFather,Mother{ publicvoidplayFootball() { System.out.println("我會(huì)踢足球!"); }

publicvoidsing() { System.out.println("我會(huì)唱歌!"); }

publicstaticvoidmain(String[]args) { SmartChildchild=newSmartChild(); child.playFootball(); child.sing(); }}類(lèi)實(shí)現(xiàn)接口時(shí)的注意事項(xiàng)注意:在類(lèi)聲明部分,用implements關(guān)鍵字指明該類(lèi)將要實(shí)現(xiàn)哪些接口。實(shí)現(xiàn)接口的類(lèi)必須在類(lèi)體中給出所有方法的實(shí)現(xiàn),否則該類(lèi)應(yīng)該聲明為抽象類(lèi)。接口中的方法都是public的,所以實(shí)現(xiàn)方法時(shí)也必須加上public,否則編譯報(bào)錯(cuò)??偨Y(jié):一個(gè)接口可以繼承另一個(gè)接口Java中不允許類(lèi)的多繼承,但允許接口的多繼承在java中一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口一個(gè)類(lèi)在繼承另一個(gè)類(lèi)的同時(shí),可以實(shí)現(xiàn)多個(gè)接口。例interfaceComputable{ finalintMAX=100; voidspeak(Strings); intf(intx); floatg(floatx,floaty);}classChinaimplementsComputable{ intxuehao; publicintf(intx) { intsum=0; for(inti=1;i<=x;i++) { sum+=i; } returnsum; } publicfloatg(floatx,floaty) { return6; } publicvoidspeak(Strings) { }}classJapanimplementsComputable{ intxuehao; publicintf(intx) { return68; } publicfloatg(floatx,floaty) { returnx+y; } publicvoidspeak(Strings) { }}publicclassExample4_26{ publicstaticvoidmain(String[]args){ Chinach; Japanja; ch=newChina();ja=newJapan(); ch.xuehao=991898;ja.xuehao=941448; System.out.println("xuehao:"+ch.MAX+ch.xuehao+ "1+2+...+100="+ch.f(100)); System.out.println("xuehao:"+ch.MAX+ja.xuehao+ "兩數(shù)之和:"+ja.g(12,23));}}接口應(yīng)用實(shí)例—程序模塊間的連接//PCI接口,可看成一種標(biāo)準(zhǔn)interfacePCI{ voidsetName(Strings); voidrun(); }//符合PCI接口標(biāo)準(zhǔn)的網(wǎng)卡,即實(shí)現(xiàn)了PCIclassNetworkCardimplementsPCI{ Stringname; publicNetworkCard() { name="D-Link"; } publicvoidsetName(Strings)//實(shí)現(xiàn)接口中的抽象方法 {

name=s; } publicvoidrun()//實(shí)現(xiàn)接口中的抽象方法 {

System.out.println(name+"網(wǎng)卡已開(kāi)始工作!"); }}例:組裝電腦,通過(guò)PCI接口將主板模塊與網(wǎng)卡模塊和聲卡模塊連接。(接口回調(diào))//符合PCI標(biāo)準(zhǔn)的聲卡,即實(shí)現(xiàn)了PCI接口classSoundCardimplementsPCI{ Stringname="SoundMax"; publicvoidsetName(Strings)//實(shí)現(xiàn)接口中的方法 {

name=s; } publicvoidrun()//實(shí)現(xiàn)接口中的方法 {

System.out.println(name+"聲卡已開(kāi)始工作!"); }}//集成PCI接口的主板classMainboard{ //usePCICard方法用來(lái)向主板插入一塊PCI卡

publicvoidusePCICard(PCIp)//參數(shù)p就是一個(gè)PCI卡 {

p.run(); } publicvoidrun() { System.out.println("主板已開(kāi)始工作!"); } }接口實(shí)例(續(xù)1)//組裝一臺(tái)電腦classComputer{ publicstaticvoidmain(String[]args) { Mainboardmb=newMainboard();//選一塊主板

NetworkCardnc=newNetworkCard();//買(mǎi)一塊網(wǎng)卡

nc.setName(“NEC”);//這是一塊NEC牌的網(wǎng)卡

SoundCardsc=newSoundCard();//買(mǎi)了一塊聲卡

mb.usePCICard(nc);//將網(wǎng)卡插到主板上

mb.usePCICard(sc);//將聲卡插到主板上

mb.run();//主板運(yùn)行 }}接口實(shí)例(續(xù)2)紅字部分注解:無(wú)論是網(wǎng)卡還是聲卡,都是PCI接口的子類(lèi),所以,他們的對(duì)象能直接傳遞給usePCICard方法中的PCI接口的引用變量p,在參數(shù)傳遞過(guò)程中發(fā)生接口回調(diào)。理解接口接口只關(guān)心功能,不關(guān)心功能的具體實(shí)現(xiàn)收費(fèi)接口與不同交通工具類(lèi)具體收費(fèi)情況項(xiàng)目主管、部門(mén)開(kāi)發(fā)、speakLove方法教務(wù)管理系統(tǒng)中,教務(wù)處模塊、各系部,如果教務(wù)處想調(diào)用各系的教學(xué)計(jì)劃并打印,此時(shí)使用接口是必要的。教學(xué)計(jì)劃(年號(hào))小結(jié)1、接口的概念:如果一個(gè)方法中的所有方法都是抽象的,則可以以接口的形式進(jìn)行定義。2、接口定義:使用interface關(guān)鍵字進(jìn)行定義,數(shù)據(jù)成員隱含修飾符:publicstaticfinal,方法隱含修飾符:publicabstract3、接口實(shí)現(xiàn):通過(guò)類(lèi)來(lái)實(shí)現(xiàn),使用implements短語(yǔ)。4、接口應(yīng)用。作業(yè)(四)二、編程1、編寫(xiě)Animal接口,接口中聲明run()方法2、編寫(xiě)Plant接口,接口中聲明eatable()方法3、定義Bird類(lèi)和Fish類(lèi)實(shí)現(xiàn)Animal接口4、定義Grass類(lèi)和Tomato類(lèi)實(shí)現(xiàn)Plant接口三、上機(jī)訓(xùn)練1、編程序驗(yàn)證:一個(gè)類(lèi)在繼承另一個(gè)類(lèi)的同時(shí)實(shí)現(xiàn)一個(gè)接口。2、在調(diào)試程序過(guò)程中總結(jié)接口定義、接口實(shí)現(xiàn)時(shí)應(yīng)注意的問(wèn)題。5、包的概念為了便于管理大型軟件系統(tǒng)中數(shù)目眾多的類(lèi),解決類(lèi)命名沖突的問(wèn)題,java引入了包。Java中的包與文件系統(tǒng)的目錄層次結(jié)構(gòu)是一一對(duì)應(yīng)的。一個(gè)包中可以包含子包,包名與子包名間用“·”分隔。Java提供的類(lèi)和接口是按不同的用途分別放在不同的包中。java.appletjava.awtjava.langjava.iojava.util(1)package語(yǔ)句功能:創(chuàng)建包格式:package包名[.子包名[…]];要求:此語(yǔ)句必須放在整個(gè)源程序第一條語(yǔ)句例:packagep;//(在當(dāng)前目錄下創(chuàng)建一個(gè)p包)packagea.b;//(在當(dāng)前目錄下創(chuàng)建a,在a下再創(chuàng)建b)注意:嵌套的包名之間以圓點(diǎn)分隔(“.”)。如果源文件中省略了package語(yǔ)句,則文件中定義的類(lèi)隱含在一個(gè)無(wú)名包中,這個(gè)無(wú)名包就是源文件所在的位置。引入java包中的類(lèi)和接口import語(yǔ)句一般情況下import語(yǔ)句緊跟在package語(yǔ)句之后功能:將其他包中的類(lèi)引入到當(dāng)前程序中。格式:import帶包層次結(jié)構(gòu)的類(lèi)名;說(shuō)明:1、引入包時(shí),類(lèi)名可以使用通配符“*”,表示包模塊中某個(gè)層次的類(lèi)全引入進(jìn)來(lái)。例: importjava.io.*; importjava.awt.Graphics;2、java會(huì)自動(dòng)引入lang包下的所有類(lèi)和接口。3、前綴包名法:不用import語(yǔ)句也可以引入其他包中的類(lèi)和接口。classArea//作業(yè)1{floatgetArea(floatr){ System.out.print("方法一:");

return3.14f*r*r;}doublegetArea(floatx,inty){ System.out.print("方法二:");

returnx*y;}floatgetArea(intx,floaty){ System.out.print("方法三:");

returnx*y;}doublegetArea(floatx,floaty,floatz){System.out.print("方法四:");return(x+x+y*y+z*z)*2.0;}}作業(yè)(五)1、將Area類(lèi)補(bǔ)充為如右所示的程序。定義新類(lèi)AreaTest,并創(chuàng)建Area類(lèi)的對(duì)象調(diào)用每一個(gè)成員方法,觀察不同的參數(shù)與調(diào)用方法的之間的關(guān)系。2、將作業(yè)1中Area與AreaTest類(lèi)分別放在不同的包中重新編譯運(yùn)行。3、按程序模板(Test.java)要求編寫(xiě)源文件,將[代碼x]按其后的要求替換為java程序代碼。分析程序輸出結(jié)果。作業(yè)3程序模板classA{ [代碼1]//聲明一個(gè)float型的實(shí)例變量a [代碼2]//聲明一個(gè)float型的類(lèi)變量b voidsetA(floata) { [代碼3]//將參數(shù)a賦值給成員變量a } voidsetB(floatb) { [代碼4]//將參數(shù)b賦值給成員變量b } floatgetA() { returna; } staticfloatgetB() { returnb; } voidoutA() { System.out.println(a); } [代碼5]//定義方法outB(),輸出變量b}publicclassTest{ [代碼6]//通過(guò)類(lèi)名引用變量b,給b賦值為100 [代碼7]//通過(guò)類(lèi)名調(diào)用方法outB() Acat=newA(); Adog=newA(); [代碼8]//通過(guò)cat調(diào)用方法setA(),將cat的成員變量a設(shè)置為200 [代碼9]//通過(guò)cat調(diào)用方法setB(),將cat的成員變量b設(shè)置為300 [代碼10]//通過(guò)dog調(diào)用方法setA(),將dog的成員變量a設(shè)置為400 [代碼11]//通過(guò)dog調(diào)用方法setB(),將dog的成員變量b設(shè)置為500 [代碼12]//通過(guò)cat調(diào)用outA() [代碼13]//通過(guò)cat調(diào)用outB() [代碼14]//通過(guò)dog調(diào)用outA() [代碼15]//通過(guò)dog調(diào)用outB()}6、常用包和類(lèi)常用包Java.langObjectMathSystem字符串StringStringBufferJava.ioJava.utilJava.awtJava.applet1Math類(lèi)(數(shù)學(xué)類(lèi))

數(shù)學(xué)類(lèi)包含了許多數(shù)學(xué)函數(shù)如sin、cos、exp、abs等。Math類(lèi)是一個(gè)工具類(lèi),它在解決與數(shù)學(xué)有關(guān)的一些問(wèn)題是有著非常重要的作用。1Math類(lèi)(數(shù)學(xué)類(lèi))方法(均為靜態(tài)方法)public

static

int

abs(

int

a

)public

static

long

abs(

long

a

)public

static

float

abs(

float

a

)public

static

double

abs(

double

a

)

求a的絕對(duì)值public

static

double

exp(

double

a

)exp求e的a次冪。1Math類(lèi)(數(shù)學(xué)類(lèi))方法(均為靜態(tài)方法)public

static

double

floor(

double

a

)floor返回

最大的

小于a的整數(shù)。public

static

double

pow(

double

a,

double

b

)pow求a的b次冪。public

static

double

sqrt(

double

a

)sqrt求a的開(kāi)平方。publicstaticdoublerandom()random產(chǎn)生0~1之間偽隨機(jī)數(shù)。

Publicstaticdoubleround(doublea)round四舍五入。例

Math類(lèi)的使用publicclassmathInstance{publicstaticvoidmain(Stringargs[]){System.out.println(Math.E);System.out.println(Math.PI);System.out.println(Math.exp(5.7));System.out.println(Math.random());System.out.println(Math.sqrt(9.08));System.out.println(Math.pow(2,3));Syst

溫馨提示

  • 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)論