




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
《Java程序設(shè)計》電子課件宋波,李晉,李妙妍,張悅2024/1/3宋波,李晉,李妙妍,張悅第1篇核心基礎(chǔ)篇第3章Java面向?qū)ο筇匦?024/1/3宋波,李晉,李妙妍,張悅本章內(nèi)容3.1類與對象3.2隱藏和封裝3.3類的繼承與多態(tài)3.4數(shù)組2024/1/3宋波,李晉,李妙妍,張悅學(xué)習(xí)目標(biāo)掌握對象與類的基本概念了解對象的生命周期熟練掌握類的定義及實例化理解隱藏與封裝熟練掌握類的繼承與多態(tài)掌握數(shù)組的應(yīng)用2024/1/3宋波,李晉,李妙妍,張悅本章概要Java中類和對象的定義;Java對OOP三個主要特性——封裝、繼承和多態(tài)的支持機制;Java中的對象數(shù)組這種數(shù)據(jù)結(jié)構(gòu)。2024/1/3宋波,李晉,李妙妍,張悅本章概要Java中類和對象的定義;Java對OOP三個主要特性——封裝、繼承和多態(tài)的支持機制;Java中的對象數(shù)組這種數(shù)據(jù)結(jié)構(gòu)。2024/1/3宋波,李晉,李妙妍,張悅3.1類與對象類與對象的定義成員變量與局部變量成員方法對象的創(chuàng)建對象的使用對象的消除方法重載this構(gòu)造方法2024/1/3宋波,李晉,李妙妍,張悅3.1.1類和對象的定義Java程序是由一個或若干個類組成,類是Java程序的基本組成單位,包括:成員變量:描述對象的屬性成員方法:描述對象的行為2024/1/3宋波,李晉,李妙妍,張悅類定義的結(jié)構(gòu)2024/1/3宋波,李晉,李妙妍,張悅1.類的聲明格式[public][abstract|final]class<className>[extendssuperClassName][implementsinterfaceNameList]類的訪問權(quán)限及其屬性類定義關(guān)鍵字類名繼承某個父類的關(guān)鍵字實現(xiàn)接口的關(guān)鍵字2024/1/3宋波,李晉,李妙妍,張悅2.類體構(gòu)造和初始化新對象的構(gòu)造方法;表示類及其對象狀態(tài)的變量;
實現(xiàn)類及其對象的方法;進行對象清除的finalize()方法。2024/1/3宋波,李晉,李妙妍,張悅2.類體構(gòu)造和初始化新對象的構(gòu)造方法;表示類及其對象狀態(tài)的變量;
實現(xiàn)類及其對象的方法;進行對象清除的finalize()方法。2024/1/3宋波,李晉,李妙妍,張悅3.1.2成員變量與局部變量成員變量(類):在類體中聲明的變量,且不屬于任何一個方法時。局部變量:在方法體中聲明的變量以及方法的參數(shù)則統(tǒng)稱為方法的局部變量。2024/1/3宋波,李晉,李妙妍,張悅【例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)變量),可通過類名直接訪問2024/1/3宋波,李晉,李妙妍,張悅2.局部變量[final]<type><varibleName>;指定局部變量為常量局部變量的參數(shù)類型局部變量的名稱2024/1/3宋波,李晉,李妙妍,張悅【例3-2】局部變量的使用publicclassApple{Stringcolor="Red";floatprice;publicStringgetColor(){returncolor;}publicfloatcount(){intnum;if(num<0)
return0;elsereturnprice*num;}成員變量錯誤語句,因為局部變量num還沒有被賦值就使用2024/1/3宋波,李晉,李妙妍,張悅publicstaticvoidmain(String[]args){Appleapple=newApple();System.out.println("蘋果總價錢:"+apple.count());}}2024/1/3宋波,李晉,李妙妍,張悅publicstaticvoidmain(String[]args){Appleapple=newApple();System.out.println("蘋果總價錢:"+apple.count());}}2024/1/3宋波,李晉,李妙妍,張悅概念:指該變量在程序代碼中的作用區(qū)域,在該區(qū)域外不能直接訪問變量。生命周期:指從聲明一個變量并分配內(nèi)存空間、使用變量開始,然后釋放該變量并清除所占用內(nèi)存空間的一個過程。3.變量的有效范圍2024/1/3宋波,李晉,李妙妍,張悅變量的種類:成員變量——類體中聲明的成員變量在整個類中有效。局部變量——在方法內(nèi)或方法內(nèi)的復(fù)合代碼塊(方法內(nèi)部,“{”與“}”之間的代碼)聲明的變量。2024/1/3宋波,李晉,李妙妍,張悅【例3-3】變量的有效范圍
publicclassOlympics1{privateintmedal_All=800;
publicvoidChina(){intmedal_CN=100;
if(medal_CN<1000){
intgold=50;
medal_CN+=30;
medal_All-=130;
}
}}成員變量代碼塊外、方法體內(nèi)的局部變量代碼塊的局部變量允許訪問本方法的局部變量
允許訪問本類的成員變量
2024/1/3宋波,李晉,李妙妍,張悅3.1.3成員方法返回值類型方法名稱{//方法開始標(biāo)記}//方法結(jié)束標(biāo)記方法主體(參數(shù)1,參數(shù)2,……
參數(shù)n)2024/1/3宋波,李晉,李妙妍,張悅注意:方法體中定義的局部變量的作用域只在方法內(nèi)部;如果局部變量的名字和類的成員變量名字相同,則類的成員變量被屏蔽;如果要在方法中使類的成員變量有效,則可以使用this關(guān)鍵字。2024/1/3宋波,李晉,李妙妍,張悅注意:方法體中定義的局部變量的作用域只在方法內(nèi)部;如果局部變量的名字和類的成員變量名字相同,則類的成員變量被屏蔽;如果要在方法中使類的成員變量有效,則可以使用this關(guān)鍵字。2024/1/3宋波,李晉,李妙妍,張悅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賦值
}2024/1/3宋波,李晉,李妙妍,張悅StringgetModel(){ return“金牌=”+gold+“銀牌=”+silver+“銅牌="+copper;}2024/1/3宋波,李晉,李妙妍,張悅publicstaticvoidmain(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=02024/1/3宋波,李晉,李妙妍,張悅3.1.4對象的創(chuàng)建一個對象的生命周期包括三個階段:對象的創(chuàng)建對象的使用對象的消除2024/1/3宋波,李晉,李妙妍,張悅創(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);2024/1/3宋波,李晉,李妙妍,張悅創(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);2024/1/3宋波,李晉,李妙妍,張悅Pointpt=
newPoint(2,3);2024/1/3宋波,李晉,李妙妍,張悅3.1.5對象的使用引用對象的變量objectReference.variableName;調(diào)用對象的方法objectReference.methodName(argumentList)2024/1/3宋波,李晉,李妙妍,張悅【例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)用成員方法
2024/1/3宋波,李晉,李妙妍,張悅3.1.6對象的消除在C++中,程序員要顯式地刪除不用的對象,即手動釋放對象占用的存儲空間。
Java提供了垃圾回收(garbagecollection)機制:自動判斷對象是否還在使用,并自動銷毀不再使用的對象,回收對象所占用的資源。2024/1/3宋波,李晉,李妙妍,張悅Java垃圾回收器執(zhí)行機制的生命周期2024/1/3宋波,李晉,李妙妍,張悅Java垃圾回收器執(zhí)行機制的生命周期2024/1/3宋波,李晉,李妙妍,張悅3.1.7方法的重載在同一個類中定義了多個同名而內(nèi)容不同的成員方法。
classScreen{ publicvoidprint(inti){…} publicvoidprint(floati){…} publicvoidprint(inti,Stringstr){…} }2024/1/3宋波,李晉,李妙妍,張悅方法重載原則:參數(shù)表必須不同:方法參數(shù)的個數(shù)不同參數(shù)類型不同返回類型、修飾符返回類型2024/1/3宋波,李晉,李妙妍,張悅【例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);}方法重載方法重載2024/1/3宋波,李晉,李妙妍,張悅
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)用哪個方法2024/1/3宋波,李晉,李妙妍,張悅3.1.8關(guān)鍵詞this用來指向?qū)ο笞陨碛脕碓L問當(dāng)前對象的數(shù)據(jù)成員;用來訪問當(dāng)前對象的成員方法;重載構(gòu)造方法時,用來引用同類的其他構(gòu)造方法。2024/1/3宋波,李晉,李妙妍,張悅3.1.8關(guān)鍵詞this用來指向?qū)ο笞陨碛脕碓L問當(dāng)前對象的數(shù)據(jù)成員;用來訪問當(dāng)前對象的成員方法;重載構(gòu)造方法時,用來引用同類的其他構(gòu)造方法。2024/1/3宋波,李晉,李妙妍,張悅【例3-8】this關(guān)鍵字的使用
publicclassFruit{ Stringcolor="綠色"; doubleprice; intnum;……publicdoublecount(doubleprice,intnum){ this.price=price; this.num=num; returnprice*num; }……}成員變量將參數(shù)值賦值給成員變量,即指向?qū)ο笞陨怼?024/1/3宋波,李晉,李妙妍,張悅3.1.9類的構(gòu)造方法功能:初始化類的成員變量特點:名稱必須與類名相同不能有返回值必須用new自動調(diào)用2024/1/3宋波,李晉,李妙妍,張悅【例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)造方法2024/1/3宋波,李晉,李妙妍,張悅2.缺省構(gòu)造方法如果在類定義中無構(gòu)造函數(shù),在編譯時可缺省加入構(gòu)造方法。如:
publicApple(){};一旦在類中有一個自己聲明的構(gòu)造函數(shù),則缺省的構(gòu)造函數(shù)將不被加到源程序中。2024/1/3宋波,李晉,李妙妍,張悅3.構(gòu)造方法的重載功能:使類對象具有不同的初始值,為對象的初始化提供方便??梢允褂胻his調(diào)用重載的構(gòu)造方法。2024/1/3宋波,李晉,李妙妍,張悅3.構(gòu)造方法的重載功能:使類對象具有不同的初始值,為對象的初始化提供方便。可以使用this調(diào)用重載的構(gòu)造方法。2024/1/3宋波,李晉,李妙妍,張悅【例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)造方法2024/1/3宋波,李晉,李妙妍,張悅classApple{ privateStringcolor; privateintnum; …… publicApple(Stringc){ this(c,0); } publicApple(){ this("Unknown"); }}調(diào)用一個參數(shù)的構(gòu)造方法2024/1/3宋波,李晉,李妙妍,張悅classApple{ privateStringcolor; privateintnum;…… publicStringgetColor(){ returncolor; } publicintgetNum(){ returnnum; }}2024/1/3宋波,李晉,李妙妍,張悅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)造方法2024/1/3宋波,李晉,李妙妍,張悅3.2隱藏與封裝封裝訪問控制package和import2024/1/3宋波,李晉,李妙妍,張悅3.2隱藏與封裝封裝訪問控制package和import2024/1/3宋波,李晉,李妙妍,張悅3.2.1封裝封裝,是指將對象的數(shù)據(jù)與操作數(shù)據(jù)的方法相結(jié)合,通過方法將對象的數(shù)據(jù)與實現(xiàn)細節(jié)保護起來。
在類的定義中設(shè)置訪問對象屬性及方法的權(quán)限,來限制該類對象及其他類的對象的使用范圍。提供一個接口來描述其他對象的使用方法。2024/1/3宋波,李晉,李妙妍,張悅3.2.2訪問控制私有的——以private修飾符指定;保護的——以protected修飾符指定;公開的——以public修飾符指定;默認的,也稱為default或package——不使用任何修飾符指定。2024/1/3宋波,李晉,李妙妍,張悅表3-1:4種訪問權(quán)限及其含義可否直接訪問同一個同一個不同包中的任何控制等級類中包中子類中場合privateYesdefaultYesYesprotectedYesYesYespublicYesYesYesYes2024/1/3宋波,李晉,李妙妍,張悅1.private修飾符其成員只能在所在類的內(nèi)部使用,在其他的類中則不允許直接訪問。同一個類的不同對象之間可以訪問對方的private成員變量和方法;訪問控制是在類的級別上,而不是在對象的級別上。2024/1/3宋波,李晉,李妙妍,張悅classParent{
private
intprivateVar;privatevoidprivateMethod(){
System.out.println(“IamprivateMethod!");}}classChild{
voidaccessMethod(){Parentp=newParent();p.privateVar=100;p.privateMethod();}}類中的私有成員非法:無法通過類Parent的對象訪問它的私有成員
2024/1/3宋波,李晉,李妙妍,張悅classParent{
private
intprivateVar;privatevoidprivateMethod(){
System.out.println(“IamprivateMethod!");}}classChild{
voidaccessMethod(){Parentp=newParent();p.privateVar=100;p.privateMethod();}}類中的私有成員非法:無法通過類Parent的對象訪問它的私有成員
2024/1/3宋波,李晉,李妙妍,張悅classParent{privateintprivateVar;publicParent(intp){ privateVar=p;}booleanisEqualTo(ParentanotherParent){if(this.privateVar==anotherParent.privateVar)returntrue;elsereturnfalse;}}當(dāng)前對象實例的成員變量與方法的參數(shù)傳遞的另一個對象實例的成員變量是否相等?2024/1/3宋波,李晉,李妙妍,張悅publicclassPrivateDemo{publicstaticvoidmain(Stringargs[]){Parentp1=newParent(20);Parentp2=newParent(40); System.out.println(p1.isEqualTo(p2));}}執(zhí)行結(jié)果:false2024/1/3宋波,李晉,李妙妍,張悅2.default如果一個類沒有顯式地設(shè)置成員的訪問控制級別,則說明它使用的是默認的訪問權(quán)限,稱為default或package。允許被這個類本身,或者相同包中的其它類訪問其default成員。
構(gòu)造方法設(shè)置為default權(quán)限時,則除這個類本身和同一個包中的類以外,其他類均不能生成該類的對象實例。2024/1/3宋波,李晉,李妙妍,張悅packagep1;classParent{intpackageVar;voidpackageMethod(){
System.out.println(“IampackageMethod!");}}packagep1;classChild{
voidaccessMethod(){Parentp=newParent();p.packageVar=10;p.packageMethod();}}類中的默認成員合法:因為Child與Parent在同一個包中,因此有權(quán)通過Parent的對象訪問它的默認成員
2024/1/3宋波,李晉,李妙妍,張悅3.protected修飾符允許類本身、它的子類、以及同一個包中其余的類訪問這些成員。2024/1/3宋波,李晉,李妙妍,張悅3.protected修飾符允許類本身、它的子類、以及同一個包中其余的類訪問這些成員。2024/1/3宋波,李晉,李妙妍,張悅packagep1;classParent{ protectedintprotectedVar; protectedvoidprotectedMethod(){ System.out.println(“IamprotectedMethod"); }}2024/1/3宋波,李晉,李妙妍,張悅packagep1;classPerson{ voidaccessMethod(){ Personp=newPerson(); tectedVar=100; tectedMethod(); }}由于Person類與Parent在同一個包中所以,可以創(chuàng)建它的對象,并實現(xiàn)訪問。2024/1/3宋波,李晉,李妙妍,張悅packagep2;importp1.*;classChildextendsParent{ voidaccessMethod(Parentp,Childc){ p.iamprotected=10; c.iamprotected=10;//子類 tectedMethod(); tectedMethod();//子類
}}X由于Child與父類Parent不在同一個包中,只能通過子類Child的對象來實現(xiàn)訪問√X√2024/1/3宋波,李晉,李妙妍,張悅4.public修飾符帶有public的成員可以被所有的類訪問。一個成員只有在被外部對象使用后不會產(chǎn)生不良后果時,才被聲明為public。2024/1/3宋波,李晉,李妙妍,張悅3.2.3package和import程序員可以將一組相關(guān)的類與接口包裹在一起形成一個包(package)。易于確定包中的類是相關(guān)的,根據(jù)功能可找到相應(yīng)的類。防止類命名混亂。控制包中的類、接口、成員變量和方法的可見性。
2024/1/3宋波,李晉,李妙妍,張悅3.2.3package和import程序員可以將一組相關(guān)的類與接口包裹在一起形成一個包(package)。易于確定包中的類是相關(guān)的,根據(jù)功能可找到相應(yīng)的類。防止類命名混亂??刂瓢械念?、接口、成員變量和方法的可見性。
2024/1/3宋波,李晉,李妙妍,張悅1.package語句指定程序中的類屬于一個哪個包:packagepkg1[.pkg2.[pkg3…]];
包定義語句在每個源程序中只能有一條,即一個類只能屬于一個包;包定義語句必須在程序的第一行(之前可有空格及注釋);包名用“.”分隔。2024/1/3宋波,李晉,李妙妍,張悅【例3-13】利用package關(guān)鍵詞,將類Circle打包到com下的graphics包中。packagecom.graphics;publicclassCircle{finalfloatPI=3.14159f;//定義一個常量PI
publicstaticvoidmain(String[]args){System.out.println("畫一個圓形!");}}包的創(chuàng)建2024/1/3宋波,李晉,李妙妍,張悅comgraphicspackagecom.graphics;該Java程序所定義的類保存的路徑為:C:\mypkg\com\graphicsclasspath=.;c:\mypkg包分隔符相當(dāng)于目錄分隔符,包存儲的路徑由包根路徑加上包名指明的路徑組成;包的根路徑由CLASSPATH環(huán)境變量指出。2024/1/3宋波,李晉,李妙妍,張悅編譯和生成包編譯之后拷貝javacCircle.java→Circle.class將Circle.class復(fù)制graphics子目錄下簡化的編譯命令javac-dC:\mypkgCircle.java1、生成C:\mypkg\com\graphics;2、將Circle.class保存到該子目錄下。2024/1/3宋波,李晉,李妙妍,張悅2024/1/3宋波,李晉,李妙妍,張悅2024/1/3宋波,李晉,李妙妍,張悅2.import語句功能:import語句告訴編譯器要使用的Java類所在的位置;注意,包名也是類名的一部分。2024/1/3宋波,李晉,李妙妍,張悅將package引入源程序,格式:
import包名.*;
import包名.類名;import語句必須在源程序之前,在package聲明之后,Java程序的結(jié)構(gòu):
[package…..]//package.;[import….]//importjava.lang.*;[類聲明…]2024/1/3宋波,李晉,李妙妍,張悅3.3類的繼承與多態(tài)類的繼承方法的重寫運行時多態(tài)對象類型的強制轉(zhuǎn)換Object類2024/1/3宋波,李晉,李妙妍,張悅3.3.1類的繼承2024/1/3宋波,李晉,李妙妍,張悅繼承其他類的類叫子類,被繼承的類叫做超類(父類)。繼承的特點層次結(jié)構(gòu)子類繼承父類的屬性和方法2024/1/3宋波,李晉,李妙妍,張悅繼承其他類的類叫子類,被繼承的類叫做超類(父類)。繼承的特點層次結(jié)構(gòu)子類繼承父類的屬性和方法2024/1/3宋波,李晉,李妙妍,張悅例3-15:2024/1/3宋波,李晉,李妙妍,張悅classAnimal{
booleanlive=true;
publicvoideat(){System.out.println("動物需要吃食物");}
publicvoidmove(){
System.out.println(“動物會運動
");}}實現(xiàn)步驟:步驟1:編寫父類步驟2:編寫子類,使用關(guān)鍵字extends繼承父類classBirdextendsAnimal{Stringskin=“羽毛"
publicvoidmove()
{
System.out.println(“鳥會飛翔
");}}父類名稱子類名稱2024/1/3宋波,李晉,李妙妍,張悅publicclassZoo{
publicstaticvoidmain(String[]args){Birdbird=newBird();bird.eat();bird.move();System.out.println("鳥有:"+bird.skin);}}訪問父類的成員方法
訪問子類的成員方法
【執(zhí)行結(jié)果】動物需要吃食物鳥會飛翔鳥有:羽毛2024/1/3宋波,李晉,李妙妍,張悅2.單繼承Java是單繼承的,即只能從一個類繼承,extends后類名只能有一個。單繼承的優(yōu)點:代碼更可靠;可以用接口彌補,用一個類實現(xiàn)多個接口,達到多繼承效果。2024/1/3宋波,李晉,李妙妍,張悅3.super關(guān)鍵字super可用于訪問父類中定義的屬性和成員方法;super可用于在子類構(gòu)造方法中調(diào)用父類的構(gòu)造方法;super的追溯不僅限于直接父類。2024/1/3宋波,李晉,李妙妍,張悅3.super關(guān)鍵字super可用于訪問父類中定義的屬性和成員方法;super可用于在子類構(gòu)造方法中調(diào)用父類的構(gòu)造方法;super的追溯不僅限于直接父類。2024/1/3宋波,李晉,李妙妍,張悅【例3-16】使用super調(diào)用父類構(gòu)造方法classAnimal{booleanlive=true;Stringskin="";publicAnimal(booleanl,Strings){live=l; skin=s;}}2024/1/3宋波,李晉,李妙妍,張悅classBirdextendsAnimal{publicBird(booleanl,Strings){super(l,s);}}publicclassZoo{publicstaticvoidmain(String[]args){Birdbird=newBird(true,"羽毛"); System.out.println("鳥有:"+bird.skin);}}通過super調(diào)用父類的構(gòu)造方法2024/1/3宋波,李晉,李妙妍,張悅注意:子類構(gòu)造方法體的第一句通常要調(diào)用父類的一個構(gòu)造方法。此時,如果不使用super指定,則將調(diào)用默認的父類構(gòu)造方法(即不帶參數(shù)的構(gòu)造方法)。如果在父類中沒有無參構(gòu)造方法,則將產(chǎn)生編譯錯誤。2024/1/3宋波,李晉,李妙妍,張悅子類中父類成員的隱藏子類隱藏父類的成員當(dāng)子類的成員變量與父類的成員變量同名時;當(dāng)子類的成員方法與父類的成員方法具有相同的名字、參數(shù)列表、返回值類型;2024/1/3宋波,李晉,李妙妍,張悅“隱藏”的含義通過子類對象調(diào)用子類中與父類同名的變量和方法時,有效的(操作)是子類中定義的變量和方法。如果要在子類中訪問父類中被隱藏的成員變量或方法,要使用關(guān)鍵詞super。2024/1/3宋波,李晉,李妙妍,張悅“隱藏”的含義通過子類對象調(diào)用子類中與父類同名的變量和方法時,有效的(操作)是子類中定義的變量和方法。如果要在子類中訪問父類中被隱藏的成員變量或方法,要使用關(guān)鍵詞super。2024/1/3宋波,李晉,李妙妍,張悅3.3.2方法的重寫在子類中對從父類繼承的方法進行改造,稱為方法的重寫。子類中重寫方法必須和父類中被重寫方法具有相同的方法名、參數(shù)列表和返回值類型子類中重寫方法的訪問權(quán)限不能縮小子類中重寫得方法不能拋出新的異常
2024/1/3宋波,李晉,李妙妍,張悅classAnimal{……
public
voidcry(){
System.out.println("動物發(fā)出叫聲!");}}classDogextendsAnimal{
publicvoidcry(){System.out.println("狗發(fā)出“汪汪”聲!");}}classCatextendsAnimal{
publicvoidcry(){System.out.println("貓發(fā)出“喵喵”聲!");}}重寫重寫【例3-18】重寫的示例2024/1/3宋波,李晉,李妙妍,張悅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ā)出喵喵聲!2024/1/3宋波,李晉,李妙妍,張悅3.3.3運行時多態(tài)多態(tài)性(Polymorphism)指在一個程序中相同名字的成員變量和方法可以表示不同的實現(xiàn)。方法重載:靜態(tài)多態(tài)性,或稱編譯時多態(tài);方法重寫(覆蓋):動態(tài)多態(tài)性;變量覆蓋:子類可以隱藏與父類中的同名成員變量。2024/1/3宋波,李晉,李妙妍,張悅1.上溯造型通過引用子類的實例來調(diào)用父類的方法,從而將一種類型(子類)對象的引用轉(zhuǎn)換成另一種類型(父類)對象的引用。Animala1=newParrot();Animala2=newDog();Animala3=newCat();2024/1/3宋波,李晉,李妙妍,張悅1.上溯造型通過引用子類的實例來調(diào)用父類的方法,從而將一種類型(子類)對象的引用轉(zhuǎn)換成另一種類型(父類)對象的引用。Animala1=newParrot();Animala2=newDog();Animala3=newCat();2024/1/3宋波,李晉,李妙妍,張悅2.運行時多態(tài)通過一個父類變量發(fā)出的方法調(diào)用:該方法在父類中的實現(xiàn)該方法在某個子類中的實現(xiàn)只能在運行時,根據(jù)該變量指向的對象類型確定2024/1/3宋波,李晉,李妙妍,張悅/*定義父類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()方法2024/1/3宋波,李晉,李妙妍,張悅3.3.4對象類型的強制轉(zhuǎn)換下溯造型
將父類類型的引用轉(zhuǎn)換為子類類型,稱為下溯造型;下溯造型不一定是安全的,需要進行類型檢查。2024/1/3宋波,李晉,李妙妍,張悅1.instanceof運算符<引用類型變量>instanceof<引用類型>boolean表達式左側(cè)是右側(cè)給出的類型或子類型時,表達式為true2024/1/3宋波,李晉,李妙妍,張悅classCatextendsAnimal{}classDogextendsAnimal{}publicclassTestInstanceof{publicvoiddoSomething(Animala){ if(ainstanceofCat){ System.out.println("ThisisaCat"); }……}使用instanceof方法測試接收的對象是否是Cat類或其子類2024/1/3宋波,李晉,李妙妍,張悅classCatextendsAnimal{}classDogextendsAnimal{}publicclassTestInstanceof{publicvoiddoSomething(Animala){ if(ainstanceofCat){ System.out.println("ThisisaCat"); }……}使用instanceof方法測試接收的對象是否是Cat類或其子類2024/1/3宋波,李晉,李妙妍,張悅2.強制類型轉(zhuǎn)換(SomeClass)aObjectVariable父類弱、子類強,指向父類的引用不能直接按子類引用,必須要強制類型轉(zhuǎn)換后才能作為子類的引用使用。強制轉(zhuǎn)換之前,一般先用instanceof對對象的類型進行測試。2024/1/3宋波,李晉,李妙妍,張悅classAnimal{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)換合法2024/1/3宋波,李晉,李妙妍,張悅3.3.5Object類Object定義了所有對象都需要的狀態(tài)和行為。例如:對象之間的比較將對象轉(zhuǎn)換為字符串等待某個條件變量當(dāng)某條件變量改變時通知相關(guān)對象返回對象的類2024/1/3宋波,李晉,李妙妍,張悅1.equals方法equals方法用于判別某個指定對象與當(dāng)前對象(調(diào)用equals方法的對象)是否等價;“數(shù)據(jù)等價”:兩個數(shù)據(jù)的值相等引用類型數(shù)據(jù)比較的是引用基本數(shù)據(jù)類型比較值2024/1/3宋波,李晉,李妙妍,張悅equals與“==”運算符equals()方法只能比較引用類型;“==”可以比較引用和基本類型;equals()方法對File、String、Date及封裝類(WrapperClass),是比較類型內(nèi)容,而不考慮引用的是否是同一個實例;2024/1/3宋波,李晉,李妙妍,張悅equals與“==”運算符equals()方法只能比較引用類型;“==”可以比較引用和基本類型;equals()方法對File、String、Date及封裝類(WrapperClass),是比較類型內(nèi)容,而不考慮引用的是否是同一個實例;2024/1/3宋波,李晉,李妙妍,張悅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!=s22024/1/3宋波,李晉,李妙妍,張悅
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}2024/1/3宋波,李晉,李妙妍,張悅2.toString方法Object類中實現(xiàn)的toString()方法是返回當(dāng)前對象的類型和內(nèi)存地址信息。但在一些子類(如String、Date等)中進行了重寫。在用戶自定義類中通常都將該方法重寫,以返回更適用的信息。2024/1/3宋波,李晉,李妙妍,張悅3.4數(shù)組一維數(shù)組多維數(shù)組數(shù)組的復(fù)制2024/1/3宋波,李晉,李妙妍,張悅Java中數(shù)組的分類Java中的數(shù)組一維數(shù)組多維數(shù)組一維數(shù)組的定義一維數(shù)組的初始化一維數(shù)組的引用二維數(shù)組的定義二維數(shù)組的初始化二維數(shù)組的引用2024/1/3宋波,李晉,李妙妍,張悅Java中數(shù)組的分類Java中的數(shù)組一維數(shù)組多維數(shù)組一維數(shù)組的定義一維數(shù)組的初始化一維數(shù)組的引用二維數(shù)組的定義二維數(shù)組的初始化二維數(shù)組的引用2024/1/3宋波,李晉,李妙妍,張悅3.4.1一維數(shù)組定義:type
arrayName[]或type[]arrayName類型(type)可以為Java中任意的數(shù)據(jù)類型,包括簡單類型和復(fù)合類如:intintArray[];
DatedateArray[];2024/1/3宋波,李晉,李妙妍,張悅注意:在聲明數(shù)組時不能指定其長度:inta[5];//不合法原因:聲明數(shù)組,只是在內(nèi)存中為該類型數(shù)組變量分配引用空間,并沒有為數(shù)組中每個元素分配數(shù)據(jù)空間。2024/1/3宋波,李晉,李妙妍,張悅2.數(shù)組的創(chuàng)建arrayName=dataType[arraySize3.數(shù)組的長度arrayName.length;2024/1/3宋波,李晉,李妙妍,張悅4.靜態(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ù)組中每個元素進行賦值2024/1/3宋波,李晉,李妙妍,張悅5.動態(tài)初始化在聲明(創(chuàng)建)一個數(shù)組類型對象時,只為其分配空間,而不同時對其中的各元素賦值。newdataType[arraySize];2024/1/3宋波,李晉,李妙妍,張悅5.動態(tài)初始化在聲明(創(chuàng)建)一個數(shù)組類型對象時,只為其分配空間,而不同時對其中的各元素賦值。newdataType[arraySize];2024/1/3宋波,李晉,李妙妍,張悅簡單類型:inta[];a=newint[3];a[0]=1;a[1]=2;a[2]=3;聲明數(shù)組變量a,為其分配定長的引用空間(值為null)1.創(chuàng)建一個含有3個元素的int型數(shù)組對象;2.為a分配3個int型數(shù)據(jù)空間3.將3個元素值初始化為0nulla0x2a567ba0000x2a567b3212024/1/3宋波,李晉,李妙妍,張悅引用類型:nulls0x2473c4snullnullnull0x2473c4Strings[];s=newString[3];S[0]S[1]S[2]地址值2024/1/3宋波,李晉,李妙妍,張悅引用類型:0x2473c4s0x478b520x2473c4s[0]=newString(“Hello");s[1]=newString(“my");s[2]=newString(“Java");S[0]S[1]S[2]0x478b680x478b3c“my"“Java"0x4d78c9He...2024/1/3宋波,李晉,李妙妍,張悅6.數(shù)組元素的引用數(shù)組元素的引用方式為:arrayName[index]index為數(shù)組下標(biāo),它可以為整型常數(shù)或表達式,下標(biāo)從0開始。每個數(shù)組都有一個屬性length指明它的長度。2024/1/3宋波,李晉,李妙妍,張悅【例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ù)組元素賦值2024/1/3宋波,李晉,李妙妍,張悅【例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ù)組元素賦值2024/1/3宋波,李晉,李妙妍,張悅3.4.2
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 科技前沿下的班級學(xué)術(shù)熱潮組織與傳播策略
- 用繪畫表達內(nèi)心的思考計劃
- 社交媒體環(huán)境下的網(wǎng)絡(luò)安全及個人隱私保護策略
- 智能倉儲系統(tǒng)的應(yīng)用計劃
- 小班自然觀察與戶外學(xué)習(xí)計劃
- 跨文化團隊中的英文溝通協(xié)調(diào)技巧
- 展會現(xiàn)場安保的策劃與執(zhí)行計劃
- 跨境電商業(yè)務(wù)流程優(yōu)化與實施
- 質(zhì)量管理體系在辦公自動化生產(chǎn)中的應(yīng)用
- 2025年鄂州市鄂城區(qū)國控投資集團有限公司公開招聘8人筆試參考題庫附帶答案詳解
- 日本留學(xué)中介簽約合同
- 鐵路安全應(yīng)急預(yù)案
- 《城市軌道交通車輛構(gòu)造》 課件 2.2 不銹鋼車體結(jié)構(gòu)認知
- 創(chuàng)傷性凝血病與輸血
- 古詩詞誦讀《李憑箜篌引》 公開課一等獎創(chuàng)新教案統(tǒng)編版高中語文選擇性必修中冊
- 小學(xué)生日常行為規(guī)范實施方案
- 2024-2025學(xué)年九年級化學(xué)人教版上冊檢測試卷(1-4單元)
- 2024年遼寧省鞍山岫巖滿族自治縣事業(yè)單位招聘(150人)歷年高頻難、易錯點500題模擬試題附帶答案詳解
- DBJ46-070-2024 海南省民用建筑外門窗工程技術(shù)標(biāo)準
- 金屬冶煉安全生產(chǎn)實務(wù)注冊安全工程師考試(初級)試題與參考答案
- 無縫氣瓶檢驗作業(yè)指導(dǎo)書2024
評論
0/150
提交評論