版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
面向?qū)ο缶幊袒A(chǔ)第1頁(yè),共75頁(yè),2023年,2月20日,星期四對(duì)象的特征——屬性屬性——對(duì)象具有的各種特征,用變量來(lái)存儲(chǔ)每個(gè)對(duì)象的每個(gè)屬性都擁有特定值例如:王小紅和朱小雨的體重不一樣
體重:60kg姓名:王小紅屬性
年齡:35歲收銀員小王第2頁(yè),共75頁(yè),2023年,2月20日,星期四對(duì)象的特征——方法方法——對(duì)象執(zhí)行的操作,描述對(duì)象的行為
打單
收銀方法刷卡收銀員王小紅第3頁(yè),共75頁(yè),2023年,2月20日,星期四類:從對(duì)象抽取出類顧客類轎車類
…………
類概括了同類對(duì)象共有的性質(zhì):屬性和方法類是對(duì)象的類型不同于int類型:具有方法
各種口味的球狀冰淇淋
球狀冰淇淋模子第4頁(yè),共75頁(yè),2023年,2月20日,星期四類和對(duì)象有什么區(qū)別呢?類是模板,比如說(shuō):“人”對(duì)象是類的一個(gè)實(shí)例,比如:“小布什”小布什普京克林頓……“人”類特征(屬性)姓名性別年齡體重行為(方法)衣食住行第5頁(yè),共75頁(yè),2023年,2月20日,星期四Java類模板class類名{//成員變量部分變量聲明1;
變量聲明2;
…變量聲明n;//定義方法部分方法1;
方法2;
…
方法m;}第6頁(yè),共75頁(yè),2023年,2月20日,星期四Java類的例子publicclassCircle{ privatedoubleradius;//成員變量radius代表圓的半徑
//構(gòu)造方法,用來(lái)初始化新對(duì)象 publicCircle(doubleradius){ this.radius=radius; }//取得圓的半徑 publicdoublegetRadius(){ returnradius; }//設(shè)置圓的半徑 publicvoidsetRadius(doubleradius){ this.radius=radius; }//計(jì)算圓的面積 publicdoublegetArea(){ returnMath.PI*radius*radius; }}第7頁(yè),共75頁(yè),2023年,2月20日,星期四成員變量publicclassCircle{
privatedoubleradius;
//構(gòu)造方法,用來(lái)初始化新對(duì)象 publicCircle(doubleradius){
this.radius=radius; }//取得圓的半徑 publicdoublegetRadius(){ returnradius; }//設(shè)置圓的半徑 publicvoidsetRadius(doubleradius){
this.radius=radius; }//計(jì)算圓的面積 doublegetArea(){ returnMath.PI*radius*radius; }}[修飾符]類型變量名[=初值];成員變量在所在類的所有方法中都是有效的成員變量可以和局部變量重名,這時(shí)訪問(wèn)成員變量要使用this.成員變量名P42第8頁(yè),共75頁(yè),2023年,2月20日,星期四方法doublegetArea(){ returnMath.PI*radius*radius;}返回類型方法名稱(類型參數(shù)名,類型參數(shù)名…)非void方法中,return語(yǔ)句是必需的!void方法可以沒(méi)有return語(yǔ)句,也可以有不帶任何值的return語(yǔ)句,僅用于終止方法,返回調(diào)用處P42第9頁(yè),共75頁(yè),2023年,2月20日,星期四方法重載publicclassTestMethodOverloading{publicstaticvoidmain(String[]args){System.out.println(max(3,4));System.out.println(max(3.0,5.4));System.out.println(max(3.0,5.4,10.14));}publicstaticintmax(intnum1,intnum2){if(num1>num2)returnnum1;elsereturnnum2;}publicstaticdoublemax(doublenum1,doublenum2){if(num1>num2)returnnum1;elsereturnnum2;}publicstaticdoublemax(doublenum1,doublenum2,doublenum3){returnmax(max(num1,num2),num3);}}同一個(gè)類中的兩個(gè)或多個(gè)方法具有相同的名稱,但有不同的參數(shù)列表。Java使用參數(shù)的類型、數(shù)量和順序決定實(shí)際調(diào)用重載方法的哪個(gè)版本第10頁(yè),共75頁(yè),2023年,2月20日,星期四11什么是構(gòu)造方法構(gòu)造方法負(fù)責(zé)對(duì)象成員的初始化工作,為成員變量賦予合適的初始值構(gòu)造方法必須滿足以下語(yǔ)法規(guī)則:1、方法名與類名相同2、沒(méi)有返回類型,沒(méi)有voidpublicclassCircle{ privatedoubleradius;
publicCircle(doubleradius){ this.radius=radius; }
…}publicclassTest{publicstaticvoidmain(String[]args){
Circlec1=newCircle(2);//創(chuàng)建Circle對(duì)象,半徑是2Circlec2=newCircle(5);//創(chuàng)建Circle對(duì)象,半徑是5}}使用new關(guān)鍵字調(diào)用構(gòu)造方法,創(chuàng)建對(duì)象P43第11頁(yè),共75頁(yè),2023年,2月20日,星期四什么是構(gòu)造方法
classWelcome{publicstaticvoidmain(String[]args){
System.out.println(“welcometoJava!”);}}這個(gè)類有構(gòu)造方法嗎?如何創(chuàng)建一個(gè)Welcome對(duì)象?類可以不聲明構(gòu)造方法,在這種情況下,類中隱含地聲明了一個(gè)方法體為空的無(wú)參構(gòu)造方法,這個(gè)構(gòu)造方法稱為默認(rèn)構(gòu)造方法。只有當(dāng)類中沒(méi)有明確聲明構(gòu)造方法時(shí),默認(rèn)構(gòu)造方法才會(huì)自動(dòng)生成。創(chuàng)建Welcome對(duì)象:Welcomew=newWelcome();//調(diào)用無(wú)參構(gòu)造方法創(chuàng)建對(duì)象第12頁(yè),共75頁(yè),2023年,2月20日,星期四如何創(chuàng)建對(duì)象1、聲明變量:類名對(duì)象名;2、使用new創(chuàng)建對(duì)象:new構(gòu)造方法(實(shí)參)3、兩個(gè)步驟同時(shí):類名對(duì)象名=new構(gòu)造方法(實(shí)參);c1=newCircle(5);c2=newCircle(6);Circlec1;Circlec2;Circle
c1=newCircle(5);Circle
c2=newCircle(6);P44第13頁(yè),共75頁(yè),2023年,2月20日,星期四Java語(yǔ)言將數(shù)據(jù)類型分成兩類:基礎(chǔ)數(shù)據(jù)類型:byte,short,int,long,float,double,boolean,char引用類型:類、數(shù)組、接口基礎(chǔ)數(shù)據(jù)類型變量存放的是數(shù)據(jù)值inti=10;intj=12;引用變量包含對(duì)象或者數(shù)組的引用地址Circlec;c=newCircle(5.0);對(duì)象的內(nèi)存模型10i:j:12c:0x34AC0c:radius:Circle對(duì)象,內(nèi)存地址0x34AC05.0第14頁(yè),共75頁(yè),2023年,2月20日,星期四對(duì)象的內(nèi)存模型Circlec1=newCircle(5);Circlec2=newCircle(6);c1=c2;c1:0x34AB6c2:radius:Circle對(duì)象,內(nèi)存地址0x34AC05.0radius:Circle對(duì)象,內(nèi)存地址0x34AB66.0如果一個(gè)對(duì)象沒(méi)有任何引用指向它,該對(duì)象就成為無(wú)用對(duì)象(半徑為5的圓),可以被垃圾回收,Java虛擬機(jī)會(huì)自動(dòng)回收無(wú)用對(duì)象,釋放空間0x34AC00x34AB6無(wú)用對(duì)象,垃圾第15頁(yè),共75頁(yè),2023年,2月20日,星期四使用對(duì)象使用對(duì)象的一般形式:對(duì)象名.成員變量對(duì)象名.方法名(實(shí)參)publicclassTest{publicstaticvoidmain(String[]args){ Circlec1=newCircle(2);//創(chuàng)建Circle對(duì)象,半徑是2Circlec2=newCircle(5);//創(chuàng)建Circle對(duì)象,半徑是5doublearea=c1.getArea();System.out.println(“c1的面積是:”+area);System.out.println(“c2的半徑是:”+c2.getRadius());}}P45第16頁(yè),共75頁(yè),2023年,2月20日,星期四類的包含關(guān)系classB{intb1;intb2;B(intx,inty){b1=x;b2=y;}voidwrite(){System.out.print(“B類的輸出!”);}}classA{Bb;inta;A(intx,inty,intz){b=newB(x,y);a=z;b.write();}}classExample{publicstaticvoidmain(String[]args){Aobj=newA(1,2,3);}}P57第17頁(yè),共75頁(yè),2023年,2月20日,星期四this關(guān)鍵字this指的是當(dāng)前對(duì)象,this的用途有下面三種:在實(shí)例方法或構(gòu)造方法內(nèi)部引用成員變量在實(shí)例方法或構(gòu)造方法內(nèi)部調(diào)用方法在構(gòu)造方法內(nèi)部調(diào)用本類的其它構(gòu)造方法P57第18頁(yè),共75頁(yè),2023年,2月20日,星期四使用this引用成員變量publicclassCircle{ privatedoubleradius; publicCircle(doubleradius){
this.radius=radius; } publicdoublegetRadius(){ returnradius; } publicvoidsetRadius(doubleradius){ this.radius=radius; } doublegetArea(){ returnMath.PI*radius*radius; }}因?yàn)閰?shù)和成員變量重名,這里使用this.radius表示成員變量radius實(shí)例成員變量前面隱含this一般省略,這里相當(dāng)于:Math.PI*this.radius*this.radiusP56第19頁(yè),共75頁(yè),2023年,2月20日,星期四使用this調(diào)用本類的方法publicclassCircle{ privatedoubleradius; publicCircle(doubleradius){
this.setRadius(); } publicdoublegetRadius(){ returnradius; } publicvoidsetRadius(doubleradius){ this.radius=radius; } doublegetArea(){ returnMath.PI*radius*radius; }}實(shí)例方法前面隱含this,一般省略P56第20頁(yè),共75頁(yè),2023年,2月20日,星期四this調(diào)用構(gòu)造方法publicclassCircle{ privatedoubleradius;
publicCircle(){
this(1.0);} publicCircle(doubleradius){ this.radius=radius; } publicdoublegetArea(){ returnMath.PI*radius*radius; }}調(diào)用本類的其他構(gòu)造方法不能使用構(gòu)造方法名稱,例如Circle(1.0)只能使用this(實(shí)參)this必須是構(gòu)造方法第一句P57第21頁(yè),共75頁(yè),2023年,2月20日,星期四publicclassRectangle{intx,y,width,height;
publicRectangle(intw,inth){
this(1,1,w,h);//必須寫在第一句//Rectangle(1,1,w,h);it’swrong}publicRectangle(intx,inty,intw,inth){this.x=x;this.y=y;this.width=width;this.height=height;}}Rectangler=newRectangle(2,4);第22頁(yè),共75頁(yè),2023年,2月20日,星期四實(shí)例變量和類變量(靜態(tài)變量)publicclassCircle{staticdoublePI=3.14;
doubleradius;
publicCircle(doubleradius){ this.radius=radius; } doublegetArea(){ returnMath.PI*radius*radius; }}使用static修飾的是類變量沒(méi)有static修飾的是實(shí)例變量P46第23頁(yè),共75頁(yè),2023年,2月20日,星期四Circlec1=newCircle(5);Circlec2=newCircle(2.5);c1c2實(shí)例變量(非static)屬于對(duì)象,其值存儲(chǔ)于對(duì)象的空間,必須通過(guò)對(duì)象名來(lái)訪問(wèn)。doubler1=c1.radius;doubler2=c2.radius;radius:5.0radius:2.5P46第24頁(yè),共75頁(yè),2023年,2月20日,星期四Circlec1=newCircle(5);Circlec2=newCircle(2.5);c1c2static變量存儲(chǔ)于類的公共內(nèi)存,被此類的所有對(duì)象共享,既可以用對(duì)象名訪問(wèn),也可以直接用類名訪問(wèn)doublep1=c1.PI;doublep2=c2.PI;doublep3=Circle.PI;radius:5.0radius:2.5PI:3.14P46第25頁(yè),共75頁(yè),2023年,2月20日,星期四publicclassTestClass{staticintts;inti;publicstaticvoidmain(String[]args){TestClassa=newTestClass();TestClassb=newTestClass();a.i=3;b.i=5;a.ts=12;b.ts+=5;TestClass.ts+=7;System.out.print(b.i);System.out.print(TestClass.ts);}}第26頁(yè),共75頁(yè),2023年,2月20日,星期四publicclassCircle{doubleradius;staticintnumberOfObjects=0;Circle(){radius=1.0;numberOfObjects++;}Circle(doublenewRadius){radius=newRadius;numberOfObjects++;}doublegetArea(){returnradius*radius*Math.PI;}}第27頁(yè),共75頁(yè),2023年,2月20日,星期四實(shí)例方法和類方法publicclassCircle{staticdoublePI=3.14;
doubleradius;
publicCircle(doubleradius){ this.radius=radius; } doublegetArea(){ returnMath.PI*radius*radius; }staticvoidmeth(){}publicstaticvoidmain(String[]args){}}使用static修飾的是類方法沒(méi)有static修飾的是實(shí)例方法P46第28頁(yè),共75頁(yè),2023年,2月20日,星期四實(shí)例方法和類方法實(shí)例方法可以接收this(當(dāng)前對(duì)象),并可以在其內(nèi)部使用this引用實(shí)例成員,實(shí)例方法只能通過(guò)對(duì)象名來(lái)調(diào)用。
publicclassCircle{staticdoublePI=3.14;
doubleradius;
publicCircle(doubleradius){ this.radius=radius; } doublegetArea(){ returnPI*radius*radius;//radius前隱含this }}Circlec1=newCircle(5);c1.getArea();//此次調(diào)用的this指的是c1,計(jì)算3.14*5*5P46第29頁(yè),共75頁(yè),2023年,2月20日,星期四實(shí)例方法和類方法static方法不能接收this(當(dāng)前對(duì)象),方法內(nèi)部不能使用this,靜態(tài)方法可以用對(duì)象名來(lái)調(diào)用,但通常用類名調(diào)用,例如Math.random()。publicclassCircle{staticdoublePI=3.14; doubleradius;
publicCircle(doubleradius){ this.radius=radius; } doublegetArea(){ returnPI*radius*radius; }staticvoidmeth(){
doublearea=PI*radius*radius;}}這句語(yǔ)句有什么錯(cuò)?不能在static方法內(nèi)部直接訪問(wèn)實(shí)例成員變量!?。?!不能在static方法內(nèi)部直接訪問(wèn)實(shí)例方法?。?!P46第30頁(yè),共75頁(yè),2023年,2月20日,星期四包的聲明和使用Java的每個(gè)類都屬于一個(gè)包,要把一個(gè)類放入包中,只需在java文件的最前端加上package語(yǔ)句,格式為:pacakge包名;packagegraphics;publicclassCircle{ doubleradius;
publicCircle(doubleradius){ this.radius=radius; } doublegetArea(){ returnPI*radius*radius; }}packagegraphics;publicclassColumne{
…}classTriangle{
…}classRectangle{
…}多個(gè)java文件開頭有相同的包聲明,這些文件中所有的類都屬于這個(gè)包P31第31頁(yè),共75頁(yè),2023年,2月20日,星期四包的聲明和使用如果一個(gè)文件的首行沒(méi)有包聲明,那么這個(gè)文件里的所有類都屬于默認(rèn)包(無(wú)名包)。包是有層次關(guān)系的,因此包的命名也要有層次,例如:
java.langjavax.swingjava.awt.eventP31第32頁(yè),共75頁(yè),2023年,2月20日,星期四訪問(wèn)外包中的類.njcit;importjava.util.Date;Importjava.text.SimpleDateFormat;
publicclassMyClass{publicstaticvoidmain(String[]args){Dated=newDate();//獲取當(dāng)前系統(tǒng)的時(shí)間
SimpleDateFormats=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); StringdateStr=s.format(d);}}.njcit;publicclassMyClass{publicstaticvoidmain(String[]args){
java.util.Date
d=newjava.util.Date();//獲取當(dāng)前系統(tǒng)的時(shí)間
java.text.SimpleDateFormats=newjava.text.SimpleDateFormat("yyyy-MM-ddHH:mm:ss"); StringdateStr=s.format(d);}}使用包名.類名訪問(wèn)使用import包名.類名第33頁(yè),共75頁(yè),2023年,2月20日,星期四訪問(wèn)外包中的類.njcit;importjava.util.*;Importjava.text.*;
publicclassMyClass{publicstaticvoidmain(String[]args){Dated=newDate();//獲取當(dāng)前系統(tǒng)的時(shí)間
SimpleDateFormats=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); StringdateStr=s.format(d);}}使用import包名.*導(dǎo)入該包的所有公共類第34頁(yè),共75頁(yè),2023年,2月20日,星期四訪問(wèn)權(quán)限Java類有兩種訪問(wèn)級(jí)別:public,如果沒(méi)有修飾符即為package級(jí)別(友好級(jí)別)public類可以在任何類中被訪問(wèn)非public類只能在同一個(gè)包中被訪問(wèn)packagea;publicclassMyClass{publicstaticvoidmain(String[]args){}}packageb;classYourClass{publicstaticvoidmain(String[]args){}}P48第35頁(yè),共75頁(yè),2023年,2月20日,星期四類成員的訪問(wèn)級(jí)別public
成員變量和方法可以在任何類中被訪問(wèn)private
成員變量和方法只能在自身所在的類中被訪問(wèn)package
成員變量和方法可以在自身所在包的類中被訪問(wèn)protected
同package+子類可訪問(wèn)第36頁(yè),共75頁(yè),2023年,2月20日,星期四37繼承動(dòng)物食草動(dòng)物食肉動(dòng)物繼承需要符合的關(guān)系:is-a,父類更通用、子類更具體第37頁(yè),共75頁(yè),2023年,2月20日,星期四38如何實(shí)現(xiàn)繼承publicclassPerson{privateStringid;//id號(hào)privateStringname; //姓名publicPerson(Stringid,Stringname){this.id=id;=name;}publicvoidsetID(Stringid){ this.id=id;}publicStringgetID(){ returnid;}//setName、getName方法publicvoiddisplay(){System.out.println("id:"+id);System.out.println("姓名:"+name);}}publicclassStudent{privateStringid;//id號(hào)privateStringname; //姓名
privateStringmajor; //專業(yè)publicStudent(Stringid,Stringname,Stringmajor){this.id=id;=name;this.major=major;}//setID、getID方法//setName、getName方法publicvoiddisplay(){System.out.println("id:"+id);System.out.println("姓名:"+name);System.out.println("專業(yè):"+major);}}第38頁(yè),共75頁(yè),2023年,2月20日,星期四publicclassPerson{privateStringid;//id號(hào)privateStringname; //姓名publicPerson(Stringid,Stringname){this.id=id;=name;}publicvoidsetID(Stringid){ this.id=id;}publicStringgetID(){ returnid;}//setName、getName方法publicvoiddisplay(){System.out.println("id:"+id);System.out.println("姓名:"+name);}}publicclassStudentextendsPerson{privateStringmajor; //專業(yè)publicStudent(Stringid,Stringname,Stringmajor){super(id,name);this.major=major; }publicvoidsetMajor(Stringmajor){this.major=major;}publicStringgetMajor(){returnmajor;}publicvoiddisplay(){super.display();System.out.println("專業(yè):"+getMajor());}publicvoidstudy(){System.out.println("學(xué)生要上學(xué)!");}}第39頁(yè),共75頁(yè),2023年,2月20日,星期四如何實(shí)現(xiàn)繼承class類名extends父類名{}父類也可稱為超類(superclass),or基類(baseclass)派生出來(lái)的類也可稱為子類(childclass)或者派生類(derivedclass)P49第40頁(yè),共75頁(yè),2023年,2月20日,星期四Java中每個(gè)類有且只有一個(gè)父類(Object類除外)如果一個(gè)類沒(méi)有明確的聲明父類,那么這個(gè)類默認(rèn)繼承Object類
publicclassMyClass{//…}publicclassMyClass
extendsObject{
//…}第41頁(yè),共75頁(yè),2023年,2月20日,星期四使用super調(diào)用父類構(gòu)造方法publicclassPerson{privateStringid;//id號(hào)privateStringname; //姓名publicPerson(Stringid,Stringname){this.id=id;=name;}publicvoiddisplay(){System.out.println("id:"+id);System.out.println("姓名:"+name);}}publicclassStudentextendsPerson{privateStringmajor; //專業(yè)publicStudent(Stringid,Stringname,Stringmajor){
super(id,name);//必須是第一句this.major=major; }publicvoiddisplay(){super.display();System.out.println("專業(yè):"+getMajor());}publicvoidstudy(){System.out.println("學(xué)生要上學(xué)!");}}Students=newStudent(“1”,“張三",“computer");只能在子類構(gòu)造方法內(nèi)部使用super關(guān)鍵字方法父類構(gòu)造方法,不能使用父類的構(gòu)造方法名稱調(diào)用。super語(yǔ)句必須是子類構(gòu)造方法的第一句P52第42頁(yè),共75頁(yè),2023年,2月20日,星期四使用super調(diào)用父類構(gòu)造方法如果在構(gòu)造方法中沒(méi)有使用super調(diào)用父類構(gòu)造方法,編譯器會(huì)默認(rèn)把super()當(dāng)成構(gòu)造方法的第一句publicclassMyClass{publicMyClass(){}}publicclassMyClassextendsObject{publicMyClass(){
super();}}第43頁(yè),共75頁(yè),2023年,2月20日,星期四使用super調(diào)用父類方法publicclassPerson{publicvoiddisplay(){ System.out.println("id:"+this.getID()); System.out.println("姓名:“+this.getName()); }}publicclassStudentextendsPerson{publicvoiddisplay(){
super.display();
//調(diào)用父類的display方法 System.out.println(“專業(yè):"+this.getMajor());}}P55第44頁(yè),共75頁(yè),2023年,2月20日,星期四使用super使用調(diào)用父類成員變量
publicclassSuperclass{publicbooleanaVariable;publicvoidaMethod(){aVariable=true;}}publicclassSubclassextendsSuperclass{publicbooleanaVariable;publicvoidaMethod(){aVariable=false;super.aMethod();System.out.println(aVariable);System.out.println(super.aVariable);}publicstaticvoidmain(String[]args){ Subclasssu=newSubclass(); su.aMethod();}}P55第45頁(yè),共75頁(yè),2023年,2月20日,星期四方法覆蓋OverridingMethods有時(shí),子類需要修改父類中定義的方法,這叫做方法的覆蓋(override)publicclassPerson{
publicvoiddisplay(){ System.out.println("\tid:"+this.getID()); System.out.println("\t姓名:"+this.getName()); }}publicclassStudentextendsPerson{
publicvoiddisplay(){ super.display();
System.out.println("\t專業(yè):"+this.getMajor()); }}子類中的實(shí)例方法(非static)和父類中的實(shí)例方法具有相同的名稱、參數(shù)列表和返回類型,就稱子類的方法覆蓋父類的方法。第46頁(yè),共75頁(yè),2023年,2月20日,星期四對(duì)象轉(zhuǎn)換Personp1=newStudent(“1”,“張三”,“計(jì)算機(jī)");父類變量子類對(duì)象這樣寫是正確的,因?yàn)閷W(xué)生對(duì)象一定是個(gè)人Personp=newCat();//錯(cuò)誤第47頁(yè),共75頁(yè),2023年,2月20日,星期四對(duì)象轉(zhuǎn)換Students=newPerson(“3201111111”,”李四”);//
編譯錯(cuò)誤這樣寫是錯(cuò)誤的,因?yàn)閷W(xué)生一定是人,但人不一定是學(xué)生第48頁(yè),共75頁(yè),2023年,2月20日,星期四DynamicBinding(動(dòng)態(tài)連編)Personp1=newStudent(“1”,“張三”,“計(jì)算機(jī)");p1.display();Person和Student類中都有display方法,但是因?yàn)閜指向的是Student對(duì)象,所以這里調(diào)用的是student類的display方法在程序的運(yùn)行時(shí)才進(jìn)行綁定,dynamicbinding,這種綁定以對(duì)象的類型來(lái)決定調(diào)用哪一個(gè)方法第49頁(yè),共75頁(yè),2023年,2月20日,星期四Personp1=newStudent(“1”,“張三”,“計(jì)算機(jī)");p1.study();通過(guò)變量可以調(diào)用哪些方法,是在編譯期由變量的類型決定的,屬于前期earlybinding,因?yàn)閜是Person類型,Person類中沒(méi)有study方法,所以不能調(diào)用。第50頁(yè),共75頁(yè),2023年,2月20日,星期四多態(tài)性publicclassPoly{publicvoidshow(Students){s.display();}publicvoidshow(Teachert){t.display();}}publicclassPoly{publicvoidshow(Personp){p.display();}}第51頁(yè),共75頁(yè),2023年,2月20日,星期四finalfinalclass不能被繼承finalclassMath{...}final變量就是常量:finaldoublePI=3.14159;final方法不能被覆蓋P54第52頁(yè),共75頁(yè),2023年,2月20日,星期四抽象方法和抽象類抽象方法:有方法聲明沒(méi)有方法實(shí)現(xiàn)如果一個(gè)類中包含抽象方法,這個(gè)類就要聲明成抽象類,反之不成立abstractclassFigure{doubledim1,dim2;Figure(doublea,doubleb){ dim1=a; dim2=b;}
abstractdoublegetArea();//只有方法頭,沒(méi)有方法體}Figuref=newFigure(2,3);//抽象類不能實(shí)例化P54第53頁(yè),共75頁(yè),2023年,2月20日,星期四抽象類和抽象方法抽象類可以被繼承,由子類實(shí)現(xiàn)其抽象方法,否則其子類必須聲明成抽象類abstractclassFigure{doubledim1,dim2;Figure(doublea,doubleb){ dim1=a; dim2=b;}
abstractdoublegetArea();//只有方法頭,沒(méi)有方法體}abstractclassRectangleextendsFigure{Rectangle(doublea,doubleb){super(a,b);}}Rectangle類繼承了Figure類,但是沒(méi)有實(shí)現(xiàn)其內(nèi)部的抽象方法,必須聲明成抽象類第54頁(yè),共75頁(yè),2023年,2月20日,星期四抽象類和抽象方法abstractclassFigure{doubledim1,dim2;Figure(doublea,doubleb){ dim1=a; dim2=b;}
abstractdoublegetArea();//只有方法頭,沒(méi)有方法體}classTriangleextendsFigure{Triangle(doublea,doubleb){ super(a,b);}doublegetArea(){returndim1*dim2/2;}}Triangle類繼承了Figure類,并且實(shí)現(xiàn)了其內(nèi)部的抽象方法,無(wú)需聲明成抽象類第55頁(yè),共75頁(yè),2023年,2月20日,星期四接口接口是一種類似于類的結(jié)構(gòu),但是接口中只能包含常量和抽象方法。
為了和類區(qū)別,定義接口使用下面的語(yǔ)法:[public]interface接口名[extends父接口列表]{
常量聲明
抽象方法}第56頁(yè),共75頁(yè),2023年,2月20日,星期四publicinterfaceEdible{
//接口中的方法隱含public和abstractpublicStringhowToEat();}publicinterfaceRunnable{publicvoidrun();}publicinterfaceSleepable{intMAX=100;//接口中的變量隱含public,static,finalpublicvoidsleep();}第57頁(yè),共75頁(yè),2023年,2月20日,星期四接口接口不能實(shí)例化可以聲明接口類型的變量,用接口聲明出的變量是引用類型變量newRunnable();//錯(cuò)誤Ediblee;RunnablerSleepables;第58頁(yè),共75頁(yè),2023年,2月20日,星期四實(shí)現(xiàn)接口classAnimal{}classChickenextendsAnimalimplementsEdible,Runnable{ publicStringhowToEat(){ return"炸著吃"; } publicvoidrun(){System.out.println("兩條腿跑"); }publicvoidlayAnEgg(){ System.out.println("母雞還可以生蛋"); }}一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,多個(gè)接口間用逗號(hào)分隔實(shí)現(xiàn)接口的方法,返回類型,名字,參數(shù)列表和接口中定義的一模一樣,并且必須是public的第59頁(yè),共75頁(yè),2023年,2月20日,星期四classPigextendsAnimalimplementsEdible,Runnable,Sleepable
{ publicStringhowToEat(){ return"蒸著吃,烤著吃,紅燒,燉湯等等"; } publicvoidrun(){ System.out.println("四條腿跑"); }publicvoidsleep(){}}第60頁(yè),共75頁(yè),2023年,2月20日,星期四abstractclassCarimplementsEdible,Runnable{ publicvoidrun(){ System.out.println("四個(gè)輪子跑"); }}一個(gè)類如果聲明要實(shí)現(xiàn)一個(gè)接口,就必須實(shí)現(xiàn)接口中的所有方法,否則就要聲明成抽象類第61頁(yè),共75頁(yè),2023年,2月20日,星期四接口定義了行為的協(xié)議,可以被任何類實(shí)現(xiàn)。一個(gè)類如果聲明要實(shí)現(xiàn)一個(gè)接口,就必須實(shí)現(xiàn)接口中的所有方法,否則就要聲明成抽象類一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但是只能有一個(gè)父類。第62頁(yè),共75頁(yè),2023年,2月20日,星期四接口的實(shí)現(xiàn)實(shí)現(xiàn)了接口的類的對(duì)象,可以賦值給該接口的變量Ediblee=newChicken();//oke.howToEat();//ok,“炸著吃"e.run();//wrong,可以調(diào)用的方法的范圍是由變量決定的e.layAnEgg();//wrong,同上e=newCar();//wrong,Car類沒(méi)有實(shí)現(xiàn)Edible接口Sleepables=newPig();//oks.Run();第63頁(yè),共75頁(yè),2023年,2月20日,星期四classTest{publicvoidrun(Runnablea){a.run();}}第64頁(yè),共75頁(yè),2023年,2月20日,星期四基本類(WrapperClasses)在程序中通常使用基礎(chǔ)數(shù)據(jù)類型的數(shù)字進(jìn)行運(yùn)算:inti=500;floatgpa=3.65f;doublesum=i*gpa;但是有的時(shí)候需要對(duì)數(shù)據(jù)進(jìn)行其他處理,例如數(shù)字和字符串的轉(zhuǎn)換,為此,Java為每個(gè)基礎(chǔ)數(shù)據(jù)類型提供一個(gè)相應(yīng)的包裝類。第65頁(yè),共75頁(yè),2023年,2月20日,星期四ObjectCharacterIntegerShortByteNumberFloatDoubleBoolean第66頁(yè),共75頁(yè),2023年,2月20日,星期四AppletJavaAp
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度智能辦公設(shè)備租賃合同標(biāo)準(zhǔn)2篇
- 瀝青道路拆除施工方案
- 《二種氟喹諾酮類抗生素光催化氧化處理方法研究》
- 2024版應(yīng)急資金過(guò)橋借款合同一
- 2025年度科技創(chuàng)新項(xiàng)目專項(xiàng)借款合同范本3篇
- 《我國(guó)居住權(quán)制度研究》
- 標(biāo)牌項(xiàng)目可行性研究報(bào)告-20241226-045149
- 小微餐飲創(chuàng)業(yè)中的品牌定位與市場(chǎng)細(xì)分策略
- 2024年船舶買賣合同標(biāo)的及詳細(xì)屬性
- 《《人間采蜜記》翻譯實(shí)踐報(bào)告》
- (正式版)JBT 10437-2024 電線電纜用可交聯(lián)聚乙烯絕緣料
- 教科版三年級(jí)上冊(cè)科學(xué)期末測(cè)試卷(二)【含答案】
- 泌尿道感染臨床路徑
- 古詩(shī)詞常見的修辭手法講課教案
- 科研項(xiàng)目評(píng)審評(píng)分表
- A5技術(shù)支持的課堂導(dǎo)入作業(yè)1—問(wèn)題描述.針對(duì)日常教學(xué)中的某一主題針對(duì)教學(xué)目標(biāo)、教學(xué)內(nèi)容以及教學(xué)對(duì)象用簡(jiǎn)短的語(yǔ)言描述當(dāng)前課堂導(dǎo)入環(huán)節(jié)中存在的問(wèn)題和不足以及借助信息技術(shù)改進(jìn)課堂導(dǎo)入的必要性
- 2-07端陽(yáng)賽馬節(jié)的傳說(shuō)
- 國(guó)家開放大學(xué)《土木工程力學(xué)(本)》章節(jié)測(cè)試參考答案
- 衣柜技術(shù)標(biāo)準(zhǔn)
- 某隧道二襯檢測(cè)報(bào)告范本(共13頁(yè))
- (完整版)臨時(shí)用電施工合同
評(píng)論
0/150
提交評(píng)論