《Java程序設(shè)計》電子課件模板_第1頁
《Java程序設(shè)計》電子課件模板_第2頁
《Java程序設(shè)計》電子課件模板_第3頁
《Java程序設(shè)計》電子課件模板_第4頁
《Java程序設(shè)計》電子課件模板_第5頁
已閱讀5頁,還剩245頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《Java程序設(shè)計》電子課件2019-5-111謝謝觀賞《Java程序設(shè)計》電子課件2019-5-111謝謝觀賞第1篇核心基礎(chǔ)篇第3章Java面向?qū)ο筇匦?019-5-112謝謝觀賞第1篇核心基礎(chǔ)篇第3章Java面向?qū)ο筇匦?本章內(nèi)容3.1類與對象3.2隱藏和封裝3.3類的繼承與多態(tài)3.4數(shù)組2019-5-113謝謝觀賞本章內(nèi)容3.1類與對象2019-5-113謝謝觀賞學(xué)習(xí)目標(biāo)掌握對象與類的基本概念了解對象的生命周期熟練掌握類的定義及實例化理解隱藏與封裝熟練掌握類的繼承與多態(tài)掌握數(shù)組的應(yīng)用2019-5-114謝謝觀賞學(xué)習(xí)目標(biāo)掌握對象與類的基本概念2019-5-114謝謝觀賞本章概要Java中類和對象的定義;Java對OOP三個主要特性——封裝、繼承和多態(tài)的支持機制;Java中的對象數(shù)組這種數(shù)據(jù)結(jié)構(gòu)。2019-5-115謝謝觀賞本章概要Java中類和對象的定義;2019-5-115謝謝觀3.1類與對象類與對象的定義成員變量與局部變量成員方法對象的創(chuàng)建對象的使用對象的消除方法重載this構(gòu)造方法2019-5-116謝謝觀賞3.1類與對象類與對象的定義2019-5-116謝謝觀賞3.1.1類和對象的定義Java程序是由一個或若干個類組成,類是Java程序的基本組成單位,包括:成員變量:描述對象的屬性成員方法:描述對象的行為2019-5-117謝謝觀賞3.1.1類和對象的定義Java程序是由一個或若干個類組類定義的結(jié)構(gòu)2019-5-118謝謝觀賞類定義的結(jié)構(gòu)2019-5-118謝謝觀賞1.類的聲明格式[public][abstract|final]class<className>[extendssuperClassName][implementsinterfaceNameList]類的訪問權(quán)限及其屬性類定義關(guān)鍵字類名繼承某個父類的關(guān)鍵字實現(xiàn)接口的關(guān)鍵字2019-5-119謝謝觀賞1.類的聲明格式[public][abstract2.類體構(gòu)造和初始化新對象的構(gòu)造方法;表示類及其對象狀態(tài)的變量;

實現(xiàn)類及其對象的方法;進行對象清除的finalize()方法。2019-5-1110謝謝觀賞2.類體構(gòu)造和初始化新對象的構(gòu)造方法;2019-5-13.1.2成員變量與局部變量成員變量(類):在類體中聲明的變量,且不屬于任何一個方法時。局部變量:在方法體中聲明的變量以及方法的參數(shù)則統(tǒng)稱為方法的局部變量。2019-5-1111謝謝觀賞3.1.2成員變量與局部變量成員變量(類):2019-【例3-1】成員變量示例publicclassApple{

publicStringcolor; //公共變量color

publicstaticintnum; //靜態(tài)變量num

publicfinalbooleanMATURE=true;//常量MATURE并賦值

publicstaticvoidmain(String[]args){System.out.println("蘋果數(shù)量:"+Apple.num);Appleapple=newApple();System.out.println("蘋果顏色:"+apple.color);System.out.println("蘋果是否成熟:"+apple.MATURE);}}num是類變量(即靜態(tài)變量),可通過類名直接訪問2019-5-1112謝謝觀賞【例3-1】成員變量示例publicclassApple2.局部變量[final]<type><varibleName>;指定局部變量為常量局部變量的參數(shù)類型局部變量的名稱2019-5-1113謝謝觀賞2.局部變量[final]<type><varibl【例3-2】局部變量的使用publicclassApple{Stringcolor="Red";floatprice;publicStringgetColor(){returncolor;}publicfloatcount(){intnum;if(num<0)

return0;elsereturnprice*num;}成員變量錯誤語句,因為局部變量num還沒有被賦值就使用2019-5-1114謝謝觀賞【例3-2】局部變量的使用publicclassApplpublicstaticvoidmain(String[]args){Appleapple=newApple();System.out.println("蘋果總價錢:"+apple.count());}}2019-5-1115謝謝觀賞publicstaticvoidmain(String概念:指該變量在程序代碼中的作用區(qū)域,在該區(qū)域外不能直接訪問變量。生命周期:指從聲明一個變量并分配內(nèi)存空間、使用變量開始,然后釋放該變量并清除所占用內(nèi)存空間的一個過程。3.變量的有效范圍2019-5-1116謝謝觀賞概念:3.變量的有效范圍2019-5-1116謝謝觀賞變量的種類:成員變量——類體中聲明的成員變量在整個類中有效。局部變量——在方法內(nèi)或方法內(nèi)的復(fù)合代碼塊(方法內(nèi)部,“{”與“}”之間的代碼)聲明的變量。2019-5-1117謝謝觀賞變量的種類:2019-5-1117謝謝觀賞【例3-3】變量的有效范圍

publicclassOlympics1{privateintmedal_All=800;

publicvoidChina(){intmedal_CN=100;

if(medal_CN<1000){

intgold=50;

medal_CN+=30;

medal_All-=130;

}

}}成員變量代碼塊外、方法體內(nèi)的局部變量代碼塊的局部變量允許訪問本方法的局部變量

允許訪問本類的成員變量

2019-5-1118謝謝觀賞【例3-3】變量的有效范圍publicclassOly3.1.3成員方法返回值類型方法名稱{//方法開始標(biāo)記}//方法結(jié)束標(biāo)記方法主體(參數(shù)1,參數(shù)2,……

參數(shù)n)2019-5-1119謝謝觀賞3.1.3成員方法返回值類型方法名稱{注意:方法體中定義的局部變量的作用域只在方法內(nèi)部;如果局部變量的名字和類的成員變量名字相同,則類的成員變量被屏蔽;如果要在方法中使類的成員變量有效,則可以使用this關(guān)鍵字。2019-5-1120謝謝觀賞注意:方法體中定義的局部變量的作用域只在方法內(nèi)部;2019-publicclassOlympics2{ privateintgold=0; privateintsilver=0; privateintcopper=0;

public

voidchangeModel(inta,intb,intc){

gold=a;//給類的成員變量賦值

intsilver=b;//使同名類成員變量silver隱藏

intcopper=50;//使同名類成員變量copper隱藏

System.out.println(“InchangModel:”+“金牌=”+gold+“銀牌=”+silver+“銅牌"+copper);

this.copper=c;//給類成員變量z賦值

}2019-5-1121謝謝觀賞publicclassOlympics2{2019-StringgetModel(){ return“金牌=”+gold+“銀牌=”+silver+“銅牌="+copper;}2019-5-1122謝謝觀賞StringgetModel(){2019-5-11publicstaticvoidmain(Stringargs[]){Olympics2o2=newOlympics2();System.out.println("BeforechangModel:"+o2.getModel()); o2.changeModel(100,100,100); System.out.println("AfterchangeModel:"+o2.getModel());}}BeforchangModel:金牌=0銀牌=0銅牌=0gold=100silver=100copper=50InchangModel:金牌=100銀牌=100銅牌=50AfterchangModel:金牌=100銀牌=0銅牌=100如果在方法中對成員變量的值進行了修改,則這種修改將是永久的。gold=0silver=0copper=02019-5-1123謝謝觀賞publicstaticvoidmain(Strin3.1.4對象的創(chuàng)建一個對象的生命周期包括三個階段:對象的創(chuàng)建對象的使用對象的消除2019-5-1124謝謝觀賞3.1.4對象的創(chuàng)建一個對象的生命周期包括三個階段:20創(chuàng)建對象創(chuàng)建對象

聲明實例化初始化類對象名稱

new

構(gòu)造方法(參數(shù))publicclassPoint{intx=1;inty=1;publicPoint(intx,inty){this.x=x;this.y=y;}}//實例化Point類,創(chuàng)建對象ptPointpt=

newPoint(2,3);2019-5-1125謝謝觀賞創(chuàng)建對象創(chuàng)建對象聲明實例化初始化類Pointpt=

newPoint(2,3);2019-5-1126謝謝觀賞Pointpt=newPoint(2,3);20193.1.5對象的使用引用對象的變量objectReference.variableName;調(diào)用對象的方法objectReference.methodName(argumentList)2019-5-1127謝謝觀賞3.1.5對象的使用引用對象的變量2019-5-1127【例3-6】對象使用的示例

publicclassPoint{intx=1;inty=1;publicvoidsetXY(intx,inty){……}publicintgetXY(){……}publicstaticvoidmain(String[]args){ Pointpt=newPoint(); pt.x=2;

System.out.println("x與y的乘積為:"+pt.getXY()); pt.setXY(3,2); System.out.println("x與y的乘積為:"+pt.getXY());}}成員變量成員方法聲明并創(chuàng)建Point類的對象pt訪問對象pt的成員變量x調(diào)用成員方法

2019-5-1128謝謝觀賞【例3-6】對象使用的示例publicclassPoi3.1.6對象的消除在C++中,程序員要顯式地刪除不用的對象,即手動釋放對象占用的存儲空間。

Java提供了垃圾回收(garbagecollection)機制:自動判斷對象是否還在使用,并自動銷毀不再使用的對象,回收對象所占用的資源。2019-5-1129謝謝觀賞3.1.6對象的消除在C++中,程序員要顯式地刪除不用的Java垃圾回收器執(zhí)行機制的生命周期2019-5-1130謝謝觀賞Java垃圾回收器執(zhí)行機制的生命周期2019-5-1130謝3.1.7方法的重載在同一個類中定義了多個同名而內(nèi)容不同的成員方法。

classScreen{ publicvoidprint(inti){…} publicvoidprint(floati){…} publicvoidprint(inti,Stringstr){…} }2019-5-1131謝謝觀賞3.1.7方法的重載在同一個類中定義了多個同名而內(nèi)容不同方法重載原則:參數(shù)表必須不同:方法參數(shù)的個數(shù)不同參數(shù)類型不同返回類型、修飾符返回類型2019-5-1132謝謝觀賞方法重載原則:2019-5-1132謝謝觀賞【例3-7】方法重載的示例

publicclassCalculate{finalfloatPI=3.14159f;

publicfloatgetArea(floatr){

returnPI*r*r;}

publicfloatgetArea(floatl,floatw){returnl*w;}

publicvoiddraw(intnum){

System.out.println("畫"+num+"個任意形狀的圖形");}

publicvoiddraw(Stringshape){

System.out.println("畫一個"+shape);}方法重載方法重載2019-5-1133謝謝觀賞【例3-7】方法重載的示例publicclassCal

publicstaticvoidmain(String[]args){Calculatec=newCalculate();//創(chuàng)建Calculate類的對象

floatl=20; floatw=40; System.out.println("求長為"+l+"寬為"+w+"的矩形面積是:"+c.getArea(l,w)); floatr=6; System.out.println("求半徑為"+r+"的圓形面積是:"+c.getArea(r));intnum=8;

c.draw(num);

c.draw(“矩形”);}}通過傳遞的參數(shù)判斷調(diào)用哪個方法通過傳遞的參數(shù)判斷調(diào)用哪個方法2019-5-1134謝謝觀賞publicstaticvoidmain(Strin3.1.8關(guān)鍵詞this用來指向?qū)ο笞陨碛脕碓L問當(dāng)前對象的數(shù)據(jù)成員;用來訪問當(dāng)前對象的成員方法;重載構(gòu)造方法時,用來引用同類的其他構(gòu)造方法。2019-5-1135謝謝觀賞3.1.8關(guān)鍵詞this用來指向?qū)ο笞陨?019-5-【例3-8】this關(guān)鍵字的使用

publicclassFruit{ Stringcolor="綠色"; doubleprice; intnum;……publicdoublecount(doubleprice,intnum){ this.price=price; this.num=num; returnprice*num; }……}成員變量將參數(shù)值賦值給成員變量,即指向?qū)ο笞陨怼?019-5-1136謝謝觀賞【例3-8】this關(guān)鍵字的使用publicclass3.1.9類的構(gòu)造方法功能:初始化類的成員變量特點:名稱必須與類名相同不能有返回值必須用new自動調(diào)用2019-5-1137謝謝觀賞3.1.9類的構(gòu)造方法功能:初始化類的成員變量2019-【例3-9】在類Apple中定義兩個構(gòu)造方法publicclassApple{privateintnum;privatedoubleprice;publicApple(){ num=10; price=2.34;}publicApple(intnum,doubleprice){ this.num=num; this.price=price;}……publicstaticvoidmain(Stringargs[]){Applea1=newApple();Applea2=newApple(50,3.15)……}}參數(shù)化構(gòu)造方法2019-5-1138謝謝觀賞【例3-9】在類Apple中定義兩個構(gòu)造方法public2.缺省構(gòu)造方法如果在類定義中無構(gòu)造函數(shù),在編譯時可缺省加入構(gòu)造方法。如:

publicApple(){};一旦在類中有一個自己聲明的構(gòu)造函數(shù),則缺省的構(gòu)造函數(shù)將不被加到源程序中。2019-5-1139謝謝觀賞2.缺省構(gòu)造方法如果在類定義中無構(gòu)造函數(shù),在編譯時可缺省3.構(gòu)造方法的重載功能:使類對象具有不同的初始值,為對象的初始化提供方便??梢允褂胻his調(diào)用重載的構(gòu)造方法。2019-5-1140謝謝觀賞3.構(gòu)造方法的重載功能:2019-5-1140謝謝觀賞【例3-10】對類Apple的構(gòu)造方法進行重載classApple{ privateStringcolor; privateintnum; publicApple(Stringc,intn){ color=c; num=n; } publicApple(Stringc){

this(c,0);

}調(diào)用兩個參數(shù)的構(gòu)造方法2019-5-1141謝謝觀賞【例3-10】對類Apple的構(gòu)造方法進行重載調(diào)用兩個參數(shù)classApple{ privateStringcolor; privateintnum; …… publicApple(Stringc){ this(c,0); } publicApple(){ this("Unknown"); }}調(diào)用一個參數(shù)的構(gòu)造方法2019-5-1142謝謝觀賞classApple{調(diào)用一個參數(shù)的構(gòu)造方法2019-classApple{ privateStringcolor; privateintnum;…… publicStringgetColor(){ returncolor; } publicintgetNum(){ returnnum; }}2019-5-1143謝謝觀賞classApple{2019-5-1143謝謝觀賞publicclassAppleDemo{ publicstaticvoidmain(String[]args){ Appleapplee=newApple(); System.out.println(“蘋果顏色:”+e.getColor());System.out.println(“蘋果數(shù)量:”+e.getNum()); }}調(diào)用無參數(shù):this(“Unknown”);—〉1個參數(shù):this(c,0);—〉2個參數(shù)的構(gòu)造方法2019-5-1144謝謝觀賞publicclassAppleDemo{調(diào)用無參數(shù):3.2隱藏與封裝封裝訪問控制package和import2019-5-1145謝謝觀賞3.2隱藏與封裝封裝2019-5-1145謝謝觀賞3.2.1封裝封裝,是指將對象的數(shù)據(jù)與操作數(shù)據(jù)的方法相結(jié)合,通過方法將對象的數(shù)據(jù)與實現(xiàn)細(xì)節(jié)保護起來。

在類的定義中設(shè)置訪問對象屬性及方法的權(quán)限,來限制該類對象及其他類的對象的使用范圍。提供一個接口來描述其他對象的使用方法。2019-5-1146謝謝觀賞3.2.1封裝封裝,是指將對象的數(shù)據(jù)與操作數(shù)據(jù)的方法相結(jié)3.2.2訪問控制私有的——以private修飾符指定;保護的——以protected修飾符指定;公開的——以public修飾符指定;默認(rèn)的,也稱為default或package——不使用任何修飾符指定。2019-5-1147謝謝觀賞3.2.2訪問控制私有的——以private修飾符指定;表3-1:4種訪問權(quán)限及其含義可否直接訪問同一個同一個不同包中的任何控制等級類中包中子類中場合privateYesdefaultYesYesprotectedYesYesYespublicYesYesYesYes2019-5-1148謝謝觀賞表3-1:4種訪問權(quán)限及其含義可否直接訪問同一個1.private修飾符其成員只能在所在類的內(nèi)部使用,在其他的類中則不允許直接訪問。同一個類的不同對象之間可以訪問對方的private成員變量和方法;訪問控制是在類的級別上,而不是在對象的級別上。2019-5-1149謝謝觀賞1.private修飾符其成員只能在所在類的內(nèi)部使用,在classParent{

private

intprivateVar;privatevoidprivateMethod(){

System.out.println(“IamprivateMethod!");}}classChild{

voidaccessMethod(){Parentp=newParent();p.privateVar=100;p.privateMethod();}}類中的私有成員非法:無法通過類Parent的對象訪問它的私有成員

2019-5-1150謝謝觀賞classParentclassChild類中的私有classParent{privateintprivateVar;publicParent(intp){ privateVar=p;}booleanisEqualTo(ParentanotherParent){if(this.privateVar==anotherParent.privateVar)returntrue;elsereturnfalse;}}當(dāng)前對象實例的成員變量與方法的參數(shù)傳遞的另一個對象實例的成員變量是否相等?2019-5-1151謝謝觀賞classParent{當(dāng)前對象實例的成員變量與方法的publicclassPrivateDemo{publicstaticvoidmain(Stringargs[]){Parentp1=newParent(20);Parentp2=newParent(40); System.out.println(p1.isEqualTo(p2));}}執(zhí)行結(jié)果:false2019-5-1152謝謝觀賞publicclassPrivateDemo{執(zhí)行結(jié)2.default如果一個類沒有顯式地設(shè)置成員的訪問控制級別,則說明它使用的是默認(rèn)的訪問權(quán)限,稱為default或package。允許被這個類本身,或者相同包中的其它類訪問其default成員。

構(gòu)造方法設(shè)置為default權(quán)限時,則除這個類本身和同一個包中的類以外,其他類均不能生成該類的對象實例。2019-5-1153謝謝觀賞2.default如果一個類沒有顯式地設(shè)置成員的訪問控制packagep1;classParent{intpackageVar;voidpackageMethod(){

System.out.println(“IampackageMethod!");}}packagep1;classChild{

voidaccessMethod(){Parentp=newParent();p.packageVar=10;p.packageMethod();}}類中的默認(rèn)成員合法:因為Child與Parent在同一個包中,因此有權(quán)通過Parent的對象訪問它的默認(rèn)成員

2019-5-1154謝謝觀賞packagep1;packagep1;類中的默認(rèn)成員3.protected修飾符允許類本身、它的子類、以及同一個包中其余的類訪問這些成員。2019-5-1155謝謝觀賞3.protected修飾符允許類本身、它的子類、以及同packagep1;classParent{ protectedintprotectedVar; protectedvoidprotectedMethod(){ System.out.println(“IamprotectedMethod"); }}2019-5-1156謝謝觀賞packagep1;2019-5-1156謝謝觀賞packagep1;classPerson{ voidaccessMethod(){ Personp=newPerson(); tectedVar=100; tectedMethod(); }}由于Person類與Parent在同一個包中所以,可以創(chuàng)建它的對象,并實現(xiàn)訪問。2019-5-1157謝謝觀賞packagep1;由于Person類與Parent在同packagep2;importp1.*;classChildextendsParent{ voidaccessMethod(Parentp,Childc){ p.iamprotected=10; c.iamprotected=10;//子類 tectedMethod(); tectedMethod();//子類

}}X由于Child與父類Parent不在同一個包中,只能通過子類Child的對象來實現(xiàn)訪問√X√2019-5-1158謝謝觀賞packagep2;X由于Child與父類Parent不4.public修飾符帶有public的成員可以被所有的類訪問。一個成員只有在被外部對象使用后不會產(chǎn)生不良后果時,才被聲明為public。2019-5-1159謝謝觀賞4.public修飾符帶有public的成員可以被所有的3.2.3package和import程序員可以將一組相關(guān)的類與接口包裹在一起形成一個包(package)。易于確定包中的類是相關(guān)的,根據(jù)功能可找到相應(yīng)的類。防止類命名混亂??刂瓢械念?、接口、成員變量和方法的可見性。

2019-5-1160謝謝觀賞3.2.3package和import程序員可以將一組相1.package語句指定程序中的類屬于一個哪個包:packagepkg1[.pkg2.[pkg3…]];

包定義語句在每個源程序中只能有一條,即一個類只能屬于一個包;包定義語句必須在程序的第一行(之前可有空格及注釋);包名用“.”分隔。2019-5-1161謝謝觀賞1.package語句指定程序中的類屬于一個哪個包:20【例3-13】利用package關(guān)鍵詞,將類Circle打包到com下的graphics包中。packagecom.graphics;publicclassCircle{finalfloatPI=3.14159f;//定義一個常量PI

publicstaticvoidmain(String[]args){System.out.println("畫一個圓形!");}}包的創(chuàng)建2019-5-1162謝謝觀賞【例3-13】利用package關(guān)鍵詞,將類Circle打包comgraphicspackagecom.graphics;該Java程序所定義的類保存的路徑為:C:\mypkg\com\graphicsclasspath=.;c:\mypkg包分隔符相當(dāng)于目錄分隔符,包存儲的路徑由包根路徑加上包名指明的路徑組成;包的根路徑由CLASSPATH環(huán)境變量指出。2019-5-1163謝謝觀賞comgraphicspackagecom.graphic編譯和生成包編譯之后拷貝javacCircle.java→Circle.class將Circle.class復(fù)制graphics子目錄下簡化的編譯命令javac-dC:\mypkgCircle.java1、生成C:\mypkg\com\graphics;2、將Circle.class保存到該子目錄下。2019-5-1164謝謝觀賞編譯和生成包編譯之后拷貝1、生成C:\mypkg\com\g2019-5-1165謝謝觀賞2019-5-1165謝謝觀賞2.import語句功能:import語句告訴編譯器要使用的Java類所在的位置;注意,包名也是類名的一部分。2019-5-1166謝謝觀賞2.import語句功能:2019-5-1166謝謝觀賞將package引入源程序,格式:

import包名.*;

import包名.類名;import語句必須在源程序之前,在package聲明之后,Java程序的結(jié)構(gòu):

[package…..]//package.;[import….]//importjava.lang.*;[類聲明…]2019-5-1167謝謝觀賞將package引入源程序,格式:2019-5-1167謝3.3類的繼承與多態(tài)類的繼承方法的重寫運行時多態(tài)對象類型的強制轉(zhuǎn)換Object類2019-5-1168謝謝觀賞3.3類的繼承與多態(tài)類的繼承2019-5-1168謝謝觀3.3.1類的繼承2019-5-1169謝謝觀賞3.3.1類的繼承2019-5-1169謝謝觀賞繼承其他類的類叫子類,被繼承的類叫做超類(父類)。繼承的特點層次結(jié)構(gòu)子類繼承父類的屬性和方法2019-5-1170謝謝觀賞繼承其他類的類叫子類,被繼承的類叫做超類(父類)。繼承的例3-15:2019-5-1171謝謝觀賞例3-15:2019-5-1171謝謝觀賞classAnimal{

booleanlive=true;

publicvoideat(){System.out.println("動物需要吃食物");}

publicvoidmove(){

System.out.println(“動物會運動

");}}實現(xiàn)步驟:步驟1:編寫父類步驟2:編寫子類,使用關(guān)鍵字extends繼承父類classBirdextendsAnimal{Stringskin=“羽毛"

publicvoidmove()

{

System.out.println(“鳥會飛翔

");}}父類名稱子類名稱2019-5-1172謝謝觀賞classAnimal{實現(xiàn)步驟:步驟1:編寫父類步驟publicclassZoo{

publicstaticvoidmain(String[]args){Birdbird=newBird();bird.eat();bird.move();System.out.println("鳥有:"+bird.skin);}}訪問父類的成員方法

訪問子類的成員方法

【執(zhí)行結(jié)果】動物需要吃食物鳥會飛翔鳥有:羽毛2019-5-1173謝謝觀賞publicclassZoo{訪問父類的成員方法2.單繼承Java是單繼承的,即只能從一個類繼承,extends后類名只能有一個。單繼承的優(yōu)點:代碼更可靠;可以用接口彌補,用一個類實現(xiàn)多個接口,達(dá)到多繼承效果。2019-5-1174謝謝觀賞2.單繼承Java是單繼承的,即只能從一個類繼承,ext3.super關(guān)鍵字super可用于訪問父類中定義的屬性和成員方法;super可用于在子類構(gòu)造方法中調(diào)用父類的構(gòu)造方法;super的追溯不僅限于直接父類。2019-5-1175謝謝觀賞3.super關(guān)鍵字super可用于訪問父類中定義的屬性【例3-16】使用super調(diào)用父類構(gòu)造方法classAnimal{booleanlive=true;Stringskin="";publicAnimal(booleanl,Strings){live=l; skin=s;}}2019-5-1176謝謝觀賞【例3-16】使用super調(diào)用父類構(gòu)造方法classAnclassBirdextendsAnimal{publicBird(booleanl,Strings){super(l,s);}}publicclassZoo{publicstaticvoidmain(String[]args){Birdbird=newBird(true,"羽毛"); System.out.println("鳥有:"+bird.skin);}}通過super調(diào)用父類的構(gòu)造方法2019-5-1177謝謝觀賞classBirdextendsAnimal{通過s注意:子類構(gòu)造方法體的第一句通常要調(diào)用父類的一個構(gòu)造方法。此時,如果不使用super指定,則將調(diào)用默認(rèn)的父類構(gòu)造方法(即不帶參數(shù)的構(gòu)造方法)。如果在父類中沒有無參構(gòu)造方法,則將產(chǎn)生編譯錯誤。2019-5-1178謝謝觀賞注意:子類構(gòu)造方法體的第一句通常要調(diào)用父類的一個構(gòu)造方法。2子類中父類成員的隱藏子類隱藏父類的成員當(dāng)子類的成員變量與父類的成員變量同名時;當(dāng)子類的成員方法與父類的成員方法具有相同的名字、參數(shù)列表、返回值類型;2019-5-1179謝謝觀賞子類中父類成員的隱藏子類隱藏父類的成員2019-5-1179“隱藏”的含義通過子類對象調(diào)用子類中與父類同名的變量和方法時,有效的(操作)是子類中定義的變量和方法。如果要在子類中訪問父類中被隱藏的成員變量或方法,要使用關(guān)鍵詞super。2019-5-1180謝謝觀賞“隱藏”的含義通過子類對象調(diào)用子類中與父類同名的變量和方法時3.3.2方法的重寫在子類中對從父類繼承的方法進行改造,稱為方法的重寫。子類中重寫方法必須和父類中被重寫方法具有相同的方法名、參數(shù)列表和返回值類型子類中重寫方法的訪問權(quán)限不能縮小子類中重寫得方法不能拋出新的異常

2019-5-1181謝謝觀賞3.3.2方法的重寫在子類中對從父類繼承的方法進行改造,classAnimal{……

public

voidcry(){

System.out.println("動物發(fā)出叫聲!");}}classDogextendsAnimal{

publicvoidcry(){System.out.println("狗發(fā)出“汪汪”聲!");}}classCatextendsAnimal{

publicvoidcry(){System.out.println("貓發(fā)出“喵喵”聲!");}}重寫重寫【例3-18】重寫的示例2019-5-1182謝謝觀賞classAnimal{重重寫【例3-18】重寫的示例publicclassZoo{

publicstaticvoidmain(String[]args){Dogdog=new

Dog();System.out.println(“執(zhí)行dog.cry()語句時的執(zhí)行結(jié)果是:");dog.cry();

Catcat=new

Cat();System.out.println(“執(zhí)行cat.cry()語句時的執(zhí)行結(jié)果是:");cat.cry();}}訪問子類Dog的重寫后的成員方法

訪問子類Cat的重寫后的成員方法【執(zhí)行結(jié)果】執(zhí)行dog.cry();語句時地執(zhí)行結(jié)果是:狗發(fā)出汪汪聲!執(zhí)行cat.cry();語句時地執(zhí)行結(jié)果是:貓發(fā)出喵喵聲!2019-5-1183謝謝觀賞publicclassZoo{訪問子類Dog的重寫后3.3.3運行時多態(tài)多態(tài)性(Polymorphism)指在一個程序中相同名字的成員變量和方法可以表示不同的實現(xiàn)。方法重載:靜態(tài)多態(tài)性,或稱編譯時多態(tài);方法重寫(覆蓋):動態(tài)多態(tài)性;變量覆蓋:子類可以隱藏與父類中的同名成員變量。2019-5-1184謝謝觀賞3.3.3運行時多態(tài)多態(tài)性(Polymorphism)指1.上溯造型通過引用子類的實例來調(diào)用父類的方法,從而將一種類型(子類)對象的引用轉(zhuǎn)換成另一種類型(父類)對象的引用。Animala1=newParrot();Animala2=newDog();Animala3=newCat();2019-5-1185謝謝觀賞1.上溯造型通過引用子類的實例來調(diào)用父類的方法,從而將一2.運行時多態(tài)通過一個父類變量發(fā)出的方法調(diào)用:該方法在父類中的實現(xiàn)該方法在某個子類中的實現(xiàn)只能在運行時,根據(jù)該變量指向的對象類型確定2019-5-1186謝謝觀賞2.運行時多態(tài)通過一個父類變量發(fā)出的方法調(diào)用:只能在運行/*定義父類Animal*/import

java.util.*;classAnimal{

voidcry(){}

voidmove(){}}/*定Animal的子類Parrot*/classParrotextendsAnimal{

voidcry(){ System.out.println("狗發(fā)出汪汪聲!");}

voidmove(){ System.out.println("小狗正在奔跑!");}}/*動物類Animal的子類Dog*/classDogextendsAnimal{

voidcry(){ System.out.println("狗發(fā)出汪汪聲!");}

voidmove(){ System.out.println("小狗正在奔跑!");}}classCatextendsAnimal{/*定義Animal的子類Cat*/

voidcry(){ System.out.println("貓發(fā)出喵喵聲!");}

voidmove(){ System.out.println("小貓正在爬行!");}}

子類重寫父類Animal的成員方法

子類重寫父類Animal的成員方法

子類重寫父類Animal的成員方法

publicclassZoo{

staticvoidanimalsCry(Animalaa[]){for(inti=0;i<aa.length;i++){ aa[i].cry();}}

publicstaticvoidmain(String[]args){

Randomrand=new

Random(); Animala[]=newAnimal[8]; for(inti=0;i<a.length;i++){ switch(rand.nextInt(3)){ case0:a[i]=newParrot();break; case1:a[i]=newDog();break; case2:a[i]=newCat();break; } } animalsCry(a);}}父類變量a[i]指向子類對象Dog或Cat。aa[i].cry調(diào)用的為Dog或Cat類的cry()方法2019-5-1187謝謝觀賞/*定義父類Animal*//*動物類Animal的子類Do3.3.4對象類型的強制轉(zhuǎn)換下溯造型

將父類類型的引用轉(zhuǎn)換為子類類型,稱為下溯造型;下溯造型不一定是安全的,需要進行類型檢查。2019-5-1188謝謝觀賞3.3.4對象類型的強制轉(zhuǎn)換下溯造型2019-5-111.instanceof運算符<引用類型變量>instanceof<引用類型>boolean表達(dá)式左側(cè)是右側(cè)給出的類型或子類型時,表達(dá)式為true2019-5-1189謝謝觀賞1.instanceof運算符<引用類型變量>insclassCatextendsAnimal{}classDogextendsAnimal{}publicclassTestInstanceof{publicvoiddoSomething(Animala){ if(ainstanceofCat){ System.out.println("ThisisaCat"); }……}使用instanceof方法測試接收的對象是否是Cat類或其子類2019-5-1190謝謝觀賞classCatextendsAnimal{}2.強制類型轉(zhuǎn)換(SomeClass)aObjectVariable父類弱、子類強,指向父類的引用不能直接按子類引用,必須要強制類型轉(zhuǎn)換后才能作為子類的引用使用。強制轉(zhuǎn)換之前,一般先用instanceof對對象的類型進行測試。2019-5-1191謝謝觀賞2.強制類型轉(zhuǎn)換(SomeClass)aObjectVclassAnimal{Stringskin;}classBirdextendsAnimal{Stringskin="羽毛";publicStringgetSkin(){returnskin;}}publicclassCasting{publicvoidsomeMethod(Animala){System.out.println(a.getSkin());

if(ainstanceofBird){ Birdb=(Bird)a;

System.out.println(b.getSkin());

}}非法:使用父類變量a調(diào)用子類成員方法強制類型轉(zhuǎn)換合法2019-5-1192謝謝觀賞classAnimal{非法:使用父類變量a強制類型轉(zhuǎn)換3.3.5Object類Object定義了所有對象都需要的狀態(tài)和行為。例如:對象之間的比較將對象轉(zhuǎn)換為字符串等待某個條件變量當(dāng)某條件變量改變時通知相關(guān)對象返回對象的類2019-5-1193謝謝觀賞3.3.5Object類Object定義了所有對象都需要1.equals方法equals方法用于判別某個指定對象與當(dāng)前對象(調(diào)用equals方法的對象)是否等價;“數(shù)據(jù)等價”:兩個數(shù)據(jù)的值相等引用類型數(shù)據(jù)比較的是引用基本數(shù)據(jù)類型比較值2019-5-1194謝謝觀賞1.equals方法equals方法2019-5-119equals與“==”運算符equals()方法只能比較引用類型;“==”可以比較引用和基本類型;equals()方法對File、String、Date及封裝類(WrapperClass),是比較類型內(nèi)容,而不考慮引用的是否是同一個實例;2019-5-1195謝謝觀賞equals與“==”運算符equals()方法只能比較引publicclassTestEquals{ publicstaticvoidmain(String[]args){ Strings1=newString("Hello"); Strings2=newString("Hello"); if(s1==s2){ System.out.println("s1==s2"); }else{ System.out.println("s1!=s2"); }//輸出:s1!=s22019-5-1196謝謝觀賞publicclassTestEquals{

if(s1.equals(s2)){ System.out.println(“s1isequaltos2");}else{ System.out.println(“s1isnotequaltos2");} //輸出:s1isequaltos2

s2=s1;if(s1==s2){ System.out.println(“s1==s2");}else{ System.out.println(“s1!=s2");}}//輸出:s1==s2}2019-5-1197謝謝觀賞if(s1.equals(s2)){2019-52.toString方法Object類中實現(xiàn)的toString()方法是返回當(dāng)前對象的類型和內(nèi)存地址信息。但在一些子類(如String、Date等)中進行了重寫。在用戶自定義類中通常都將該方法重寫,以返回更適用的信息。2019-5-1198謝謝觀賞2.toString方法Object類中實現(xiàn)的toStr3.4數(shù)組一維數(shù)組多維數(shù)組數(shù)組的復(fù)制2019-5-1199謝謝觀賞3.4數(shù)組一維數(shù)組2019-5-1199謝謝觀賞Java中數(shù)組的分類Java中的數(shù)組一維數(shù)組多維數(shù)組一維數(shù)組的定義一維數(shù)組的初始化一維數(shù)組的引用二維數(shù)組的定義二維數(shù)組的初始化二維數(shù)組的引用2019-5-11100謝謝觀賞Java中數(shù)組的分類Java中的數(shù)組一維數(shù)組多維數(shù)組一維數(shù)組3.4.1一維數(shù)組定義:type

arrayName[]或type[]arrayName類型(type)可以為Java中任意的數(shù)據(jù)類型,包括簡單類型和復(fù)合類如:intintArray[];

DatedateArray[];2019-5-11101謝謝觀賞3.4.1一維數(shù)組定義:2019-5-11101謝謝觀賞注意:在聲明數(shù)組時不能指定其長度:inta[5];//不合法原因:聲明數(shù)組,只是在內(nèi)存中為該類型數(shù)組變量分配引用空間,并沒有為數(shù)組中每個元素分配數(shù)據(jù)空間。2019-5-11102謝謝觀賞注意:在聲明數(shù)組時不能指定其長度:2019-5-11102謝2.數(shù)組的創(chuàng)建arrayName=dataType[arraySize3.數(shù)組的長度arrayName.length;2019-5-11103謝謝觀賞2.數(shù)組的創(chuàng)建arrayName=dataType4.靜態(tài)初始化聲明并創(chuàng)建了一個長度為3的double型的數(shù)組doubled[]={3.14,2.718,10.0};Strings[]={“Hello",“my",“Java"};聲明并創(chuàng)建了一個長度為3的String型的數(shù)組d[0]=3.14;d[1]=2.718;d[2]=10.0s[0]="Hello"s[1]="my"s[2]="Java"靜態(tài)初始化:在聲明一個數(shù)組的同時,對該數(shù)組中每個元素進行賦值2019-5-11104謝謝觀賞4.靜態(tài)初始化聲明并創(chuàng)建了一個長度doubled[5.動態(tài)初始化在聲明(創(chuàng)建)一個數(shù)組類型對象時,只為其分配空間,而不同時對其中的各元素賦值。newdataType[arraySize];2019-5-11105謝謝觀賞5.動態(tài)初始化在聲明(創(chuàng)建)一個數(shù)組類型對象時,只為其分簡單類型:inta[];a=newint[3];a[0]=1;a[1]=2;a[2]=3;聲明數(shù)組變量a,為其分配定長的引用空間(值為null)nulla0x2a567ba0000x2a567b3212019-5-11106謝謝觀賞簡單類型:inta[];聲明數(shù)組變量a,為其分配定長的引用類型:nulls0x2473c4snullnullnull0x2473c4Strings[];s=newString[3];S[0]S[1]S[2]地址值2019-5-11107謝謝觀賞引用類型:nulls0x2473c4snullnullnul引用類型:0x2473c4s0x478b520x2473c4s[0]=newString(“Hello");s[1]=newString(“my");s[2]=newString(“Java");S[0]S[1]S[2]0x478b680x478b3c“my"“Java"0x4d78c9He...2019-5-11108謝謝觀賞引用類型:0x2473c4s0x478b520x2473c46.數(shù)組元素的引用數(shù)組元素的引用方式為:arrayName[index]index為數(shù)組下標(biāo),它可以為整型常數(shù)或表達(dá)式,下標(biāo)從0開始。每個數(shù)組都有一個屬性length指明它的長度。2019-5-11109謝謝觀賞6.數(shù)組元素的引用數(shù)組元素的引用方式為:【例3-24】int[]anArray; anArray=newint[10]; for(inti=0;i<anArray.length;i++){anArray[i]=i;System.out.print(anArray[i]+"");}聲明數(shù)組創(chuàng)建長度為10的數(shù)組數(shù)組的長度為每個數(shù)組元素賦值2019-5-11110謝謝觀賞【例3-24】int[]anArray; 3.4.2二維數(shù)組定義:

typearrayName[][];

或type[][]arrayName;類型(type)可以為Java中任意的數(shù)據(jù)類型,包括簡單類型和復(fù)合類例如:intintArray[][];Date[][]dateArray;2019-5-11111謝謝觀賞3.4.2二維數(shù)組定義:2019-5-11111謝謝觀賞示例:inta[][]=newint[4][5];將創(chuàng)建一個有4個數(shù)組的數(shù)組,每個數(shù)組中又有5個整數(shù),即4行5列的整數(shù)矩陣。2019-5-11112謝謝觀賞示例:inta[][]=newint[4][靜態(tài)初始化inta[][]={{2,3},{1,5},{3,4}};a[0][0]=2 a[0][1]=3a[1][0]=1 a[1][1]=5a[2][0]=3a[2][1]=42315342019-5-11113謝謝觀賞靜態(tài)初始化inta[][]={{2,3},{1,靜態(tài)初始化inta[][]={{1,2},{3,4,0,9},{5,6,7}};a[0][0]=1 a[0][1]=2a[1][0]=3 a[1][1]=4a[1][2]=0a[1][3]=9a[2][0]=5a[2][1]=6a[2][2]=71234095672019-5-11114謝謝觀賞靜態(tài)初始化inta[][]={{1,2},{3,二維數(shù)組的動態(tài)初始化inta[][];a=newint[3][];a[0]=newint[2];a[1]=newint[4];a[2]=newint[3];1234095672019-5-11115謝謝觀賞二維數(shù)組的動態(tài)初始化inta[][];122正確的說明示例:inta1[][]=newint[2][3];inta2[][]=newint[2][];inta3[][]=newint[4][6];將創(chuàng)建一個有2個數(shù)組的數(shù)組,每個數(shù)組中又有3個整數(shù),即2行3列的整數(shù)矩陣2019-5-11116謝謝觀賞正確的說明示例:inta1[][]=newint錯誤的說明示例interrarr1[2][3];不允許靜態(tài)說明數(shù)組數(shù)組維數(shù)說明順序應(yīng)從高維到低維數(shù)組維數(shù)的指定只能在new運算符之后interrarr2[][]=newint[][4];interrarr3[][4]=newint[3][4];2019-5-11117謝謝觀賞錯誤的說明示例interrarr1[2][3];不允許靜態(tài)0x2473c4a0x478b520x2473c4inta[][];a=newint[3][3];a[0]a[1]a[2]0x478b680x478b3c0x4d78c90a[0][0]a[0][1]a[0][2]000a[2][0]a[2][1]a[2][2]002019-5-11118謝謝觀賞0x2473c4a0x478b520x2473c4int【例3-25】int[][]aMatrix=newint[3][];將創(chuàng)建一個有3個數(shù)組的數(shù)組,每個數(shù)組中又有0~a[i].lengh-1個整數(shù),即3行0~a[i].lengh-1列的整數(shù)矩陣2019-5-11119謝謝觀賞【例3-25】int[][]aMatrix=newfor(inti=0;i<aMatrix.length;i++){

for(intj=0;j<aMatrix[i].length;j++){ aMatrix[i][j]=i+j;}控制矩陣的行數(shù)給每個數(shù)組元素賦值aMatrix[i]=newint[4];創(chuàng)建每個列數(shù)組,每個數(shù)組有4個元素2019-5-11120謝謝觀賞for(inti=0;i<aMatrix.length;ifor(inti=0;i<aMatrix.length;i++){ for(intj=0;j<aMatrix[i].length;j++){ System.out.print(aMatrix[i][j]+""); } System.out.println();//換行}2019-5-11121謝謝觀賞for(inti=0;i<aMatrix.length;i3.4.3數(shù)組的復(fù)制數(shù)組變量之間的賦值是引用賦值,不能實現(xiàn)數(shù)組數(shù)據(jù)的復(fù)制:inta[]=newint[3];intb[];b=a;0x4a678ba00x4a678ba[0]a[1]a[2]000x4a678bb2019-5-11122謝謝觀賞3.4.3數(shù)組的復(fù)制數(shù)組變量之間的賦值是引用賦值,不能實數(shù)組的復(fù)制publicstaticvoidarraycopy(Object

src,int

src_position,Object

dst,int

dst_position,int

length)2019-5-11123謝謝觀賞數(shù)組的復(fù)制publicstaticvoidarrayc本章小結(jié)本章圍繞OOP三個基本特征:封裝、繼承、多態(tài)全面介紹了Java中:類的結(jié)構(gòu)與定義對象的創(chuàng)建、使用與清除類的繼承與多態(tài)理解并掌握數(shù)組的定義2019-5-11124謝謝觀賞本章小結(jié)本章圍繞OOP三個基本特征:2019-5-111242019-5-11125謝謝觀賞2019-5-11125謝謝觀賞《Java程序設(shè)計》電子課件2019-5-11126謝謝觀賞《Java程序設(shè)計》電子課件2019-5-111謝謝觀賞第1篇核心基礎(chǔ)篇第3章Java面向?qū)ο筇匦?019-5-11127謝謝觀賞第1篇核心基礎(chǔ)篇第3章Java面向?qū)ο筇匦?本章內(nèi)容3.1類與對象3.2隱藏和封裝3.3類的繼承與多態(tài)3.4數(shù)組2019-5-11128謝謝觀賞本章內(nèi)容3.1類與對象2019-5-113謝謝觀賞學(xué)習(xí)目標(biāo)掌握對象與類的基本概念了解對象的生命周期熟練掌握

溫馨提示

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

評論

0/150

提交評論