




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Chapter3Object-OrientedProgramming3.1Introduction
Theobject-orientedprogrammingapproachorganizesprogramsinawaythatmirrorstherealworld,inwhichallobjectsareassociatedwithbothattributesandactivities.
ObjectsandClasses3.2ClassesClassesareconstructsthatdefineobjectsofthesametype.AJavaclassusesvariablestodefinedatafieldsandmethodstodefinebehaviors.Additionally,aclassprovidesmethodsofsspecialtype,knownasconstructors,whichareinvokedtoconstructobjectsfromthe
class.classCircle{
/**Theradiusofthiscircle*/doubleradius=1.0;
/**Constructacircleobject*/Circle(doublenewRadius){radius=newRadius;}
/**Returntheareaofthiscircle*/doublefindArea(){returnradius*radius=3.14159;}}DatafieldMethodsConstructorsFig3.1Aclassisaconstructthatdefinesobjectsofthesametype.
Circle
radius:doublefindArea():double
circle1:Circle
radius=2
circle2:Circle
radius=5……Fig3.2AclasscanhavemanydifferentobjectsAnobjectrepresentsanentityintherealworldthatcanbedistinctilyidentified.3.2.1DefiningClasses[Modifiers]
class
ClassName
[extendsSuperClass][implementsInterfaceName]{………………………………}DatafieldsConstructorsMethodsThesyntax:……classBox{doublewidth,height,depth;Box(doublew,doubleh,doubled){width=w;height=h;depth=d;}doublevolume(){returnwidth*height*depth;}voidBoxMessage(Graphicsg,intx,inty){g.drawString(“Thewidth:”+width,x,y);g.drawString(“Theheight:”+height,x,y+15);g.drawString(“Thedepth:”+depth,x,y+30);}}……
DefiningDataField[public][private][static][final]datatypevariableName=[value1][,variable2[=value2]…]Thesyntax:Modifiers:
public
canbeaccessbyanyclass.
privatecanbeaccessonlyfromwithinitsownclass.
package-privateorpackage-access
canbeaccessbyanyclassinthesamepackage.publicclassMyDate{intyear,month,day;......}
packagep1;publicclassC1{publicintx;inty;privateintz;publicvoidm1(){}voidm2(){}privatem3(){}}publicclassC2{C1o=newC1();canaccesso.x;canaccesso.y;cannotaccesso.z;caninvokeo.m1();caninvokeo.m2();cannotinvokeo.m3();}packagep2;publicclassC3{C1o=newC1();canaccesso.x;cannotaccesso.y;cannotaccesso.z;caninvokeo.m1();cannotinvokeo.m2();cannotinvokeo.m3();}Fig3.2Theprivatemodiferrestrictsaccesstowithinaclass,thedefaultmodifierrestrictsaccesstowithinapackage,andthepublicmodifierenablesunrestrictedaccess.packagep1;classC1{……}publicclassC2{canaccessC1;}packagep2;publicclassC3{cannotaccessC1;}Fig3.3Anon-publicclasshaspackage-accessSimilarly:DefiningMethods[public][private][static][abstract][final][synchronized]
returnValueTypemethod([parameters]){
……//bodyofmethods[return[returnValue]];}Thesyntax:constructors
and
mainpublicclassMyDate{intyear,month,day;voidsetDate(inty,intm,intd){year=y;month=m;day=d;}}Mainmethodpublicstaticvoidmain(Stringargs[])在Java的Application程序中,必須有一個且僅有一個主方法main。當(dāng)一個程序文件中包含一個或多個類時,程序文件的名稱必須與包含main方法的類名相同。Main方法是Java程序的起點。main()沒有返回值,有一個字符串?dāng)?shù)組參數(shù)依次存放Java程序執(zhí)行時提供的命令行參數(shù)。ConstructorsConstructorsareaspecialkindofmethod,withthreedifferences:DefaultConstructorConstructorsmusthavethesamenameastheclassitself.Constructorsdonothaveareturntype---notevenvoid.Constructorsareinvokedusingthenewoperatorwhenanobjectiscreated.Constructorsplaytheroleofinitializingobjects.Aclass’svariablecanbedeclaredonlyonce,butlocalvariablescanbedeclaredmanytimesindifferentnon-nestingblocks.Javaassignsdefaultvaluetoareferencetypevariable,howeverassignsnodefaultvaluetoalocalvariableinsideamethodClass’sVariablesandLocalVariablesclassMyArray{......voidmyMethod(){......
for(inti=0;i<10;i++){......}
for(inti=0;i<20;i++){......}
......}}成員變量與它在類體中書寫的先后位置無關(guān)。publicclassMyDate{voidsetDate(inty,intm,intd){year=y;month=m;day=d;}
intyear,month,day;}如果局部變量的名字與成員變量名相同,則成員變量被隱藏classPoint{intx,y;Point(intx,inty){x=100,y=200
;......}}Keyword---thisclassPoint{ intx,y; Point(intx,inty){this.x=x;this.y=y;}}
this
usedtoreferenceaclass’shidenvariable.Thekeywordthiscanalsobeusedinsideaconstructortoinvokeanotherconstructorofthesameclass.Note---DataFieldEncapsulationprivatepropertyName;…………publicreturnTypegetPropertyName()publicvoidsetPropertyName(dataTypepropertyValue)3.2.2UsingObjectsConstructingObjectsUsingConstructorsnewClassName(arguments);ReferenceVariablesClassNameobjectRefVar;CriclemyCircle=newCricle();Anexample:ReferenceTypeclassPoint{intx,y;Point(inta,intb){x=a;y=b;}}publicclassUsePoint{publicstaticvoidmain(Stringargs[]){
Pointp1,p2;p1=newPoint(10,10);p2=newPoint(23,35);……}}InitializingObjectsandConstructorsnew
ClassName()classCircle{doubleradius=1.0;Circle(doublenewRadius){radius=newRadius;}doublefindArea(){returnradius*radius=3.14159;}}publicclassUseCircle{publicstaticvoidmain(Stringargs[]){
CirclemyCircle=newCircle(50);......}}DefaultConstructor缺省構(gòu)造方法是一個沒有參數(shù)的特殊的構(gòu)造方法。當(dāng)類中沒有定義任何構(gòu)造方法時,系統(tǒng)隱含提供缺省構(gòu)造方法。classTempA{inta=10;intb;method1(……){……}……}……TempAA=newTempA();
AccessinganObject’sDataandmethodobjectRefVar.dataobjectRefVar.method(arguments)myCircle.setRadius(50);myCircle.findArea();System.out.println(“Theareais”+myCircle.findArea());
Examples:
MethodInvoking類的方法有實例方法(Object’smethod)和類方法(Staticmethod)。實例方法的調(diào)用必須先創(chuàng)建對象,而類方法可以直接通過類名來進(jìn)行;方法調(diào)用時,實參代替形參,且兩者在參數(shù)類型、個數(shù)和順序上必須保持一致;在方法體中,通過return語句實現(xiàn)從當(dāng)前方法中退出,表達(dá)式的類型應(yīng)與方法聲明中返回值的類型一致;return表達(dá)式;方法調(diào)用形式無返回值作為表達(dá)式語句。如:System.out.println();有返回值作為表達(dá)式或表達(dá)式的一部分作為另一個方法調(diào)用的實參(方法的嵌套調(diào)用)參數(shù)傳遞方式
classSample{publicsample(inti){ intresult=test(i); System.out.println(i);System.out.println(result);}protectedinttest(inta){ return++a;}}publicclassdoSample{ publicstaticvoidmain(Stringargs[]){Sampler=newSample(3); System.out.println("Thisistheresult!");}}34Thisistheresult!classMyInteger{ inti; }classsample0{inttest(MyIntegera){ return++a.i; }}publicclassDoSample0{publicstaticvoidmain(Stringargs[]){sample0r=newsample0();MyIntegera=newMyInteger();a.i=1;System.out.println(r.test(a)); System.out.println(r.test(a)); System.out.println("Thisistheresult!");}}23Thisistheresult!
PassingObjectstoMethodsisactuallypassingthereferenceoftheobject.ConclusionsformethodInvoking:
AnObject’sDestroyDestructors(析構(gòu)方法)
publicvoidfinalize(){............//statements}
myCircle.finalize();
Examples:Caution---DifferencesBetweenVariablesofPrimitiveTypesandReferenceTypes1Primitivetype
inti=1
ireferenceObjecttype
Circlec
c
c:Circleradius=1Createdusing
newCircle()NullPointerExceptionNote---ThenullValueisaspecialJavavalue.isforreferencetypevariables.Like
0foranumerictypefalseforabooleantype‘\u0000’forachartypenull3.2Encapsulation3.2.1類及其成員的訪問權(quán)限權(quán)限修飾符同一類同一包不同包的子類所有類公有的(public)√√√√保護(hù)的(protected)√√√默認(rèn)的√√私有的(private)√3.2.2實例成員和類成員實例變量和類變量實例方法和類方法CirclemyCircle,yourCircle
;myCircle.radius
......classTakecare{staticintx;......}classA{Takecarea1=newTakecare();Takecarea2=newTakecare();}a1.x=18;//a1.xanda2.xare18
......publicclassMyDate{privateintyear,month,day
;
staticintcount=0;publicMyDate(inty,intm,intd){year=y
;month=((m>=1)&(m<=12))
?m
:1
;day=((d>=1)&(d<=31))
?d
:1
;count++
;}
publicstaticvoidprint_count(){System.out.println(“count=”+count+””);}publicvoidprint(){print_count();System.out.println(“dateis”+year+”-”+month+”-’+day);}publicvoidfinalize(){count--;}}publicclassUseMyDate{publicstaticvoidmain(Stringargs[]){MyDatemydate=newMyDate(2009,3,16);Mydate.print_count();mydate.print();MyDateyourdate=newMyDate(2009,3,15);yourdate.print();mydate.finalize();MyDate.print_count();}}類方法中不能使用this或super關(guān)鍵字
this
usedtoreferenceaclass’shidenvariableormethods.Thekeywordthiscanalsobeusedinsideaconstructortoinvokeanotherconstructorofthesameclass.3.2.3Keyword---thisThekeywordthiscanalsobeusedtorefercurrentobjectitself.this.<成員變量
>this.<成員方法
>thispublicclassCircle{privatedoubleradius;publicCircle(doubleradius){this.radius=radius;}publicCircle(){this(1.0);}publicdoublefindArea()[returnthis.radius*this.radius*Math.PI;}}Thisisusedtoinvokeanotherconstructor.
The“this
”isnormallyomitted.3.3InheritanceofClassesX1X2Y1Y2Y3X1Y1Y2Z1Z2Z33.3.1
DerivingnewclassesfromexistingclassesDeclaringSubclasses[Modifiers]
class
SubClass
extends
SuperClass{……//thebodyofclass}Notes:沒有extends,默認(rèn)父類為Object只能有一個父類,即單繼承子類繼承父類的除private修飾的全部成員類繼承具有傳遞性classB{intb1=1;publicintb2=2;protectedintb3=3;privateintb4=4;
intgetb4(){returnb4;}}classAextendsB{inta=5;
intsum(){returnb1+b2+b3+getb4()+a;}}2.HidingDataFieldsandOverringMethods
(父類成員變量的隱藏和方法重寫)Ifyoudeclareadatafieldinasubclasswiththesamenameasoneinthesuperclass,theoneinheritedthesuperclassishidden.Thisisreferedtoasvariableshidden;Asubclassinheritsmethodsfromasuperclass.Sometimesitisnecessaryforthesubclasstomodifytheimplementationofamethoddefinedinthesuperclass.Thisisreferredtoasmethodoverriding.classA{inti,j;voidsetIJ(inti,intj){ this.i=i;this.j=j;}intmultiply(){ returni*j;}}classBextendsA{inti,k;B(inti,intk){ this.i=i; this.k=k;} intmultiply(){ returni*j*k;}}publicclassASTest{ publicstaticvoidmain(Stringargs[]){ Bsub0=newB(6,9); sub0.setIJ(7,8); intm=sub0.multiply(); System.out.println(“m=”+m); }}Theresults:m=432classFather{ voidspeak(){ //父類定義的speak方法 System.out.println("IamFather!"); }}classSonextendsFather{ voidspeak(){ //子類重寫的speak方法 System.out.println("IamSon!"); }}publicclassCheck{ publicstaticvoidmain(Stringargs[]){ Sonx=newSon(); x.speak(); //調(diào)用子類的speak方法 }}ExampleformethodoverridingTheresults:IamSon!
Note:Everyinstanceofasubclassisaninstanceofitssuperclass.(在程序中凡是要求使用父類的地方,都可以使用子類對象來代替。)這是因為子類通過繼承具備了父類對象的所有屬性(私有屬性除外)。對于子類重寫的方法,Java運行時系統(tǒng)會根據(jù)調(diào)用該方法的實例的類型來決定選擇哪個方法調(diào)用。即對于子類的一個實例,如果子類重寫了父類的方法,則運行時系統(tǒng)調(diào)用子類的方法;如果子類繼承了父類的方法,則運行時系統(tǒng)就調(diào)用父類的方法。因此,一個父類對象可以通過引用子類的實例來調(diào)用子類的方法。Therefore,youcanalwayspassaninstanceofasubclasstoaparameterofitssuperclasstype.publicclassTest{publicstaticvoidmain(String[]args){m(newGraduateStudent());m(newStudent());m(newPerson());m(newObject());}publicstaticvoidm(Objectx){System.out.println(x.toString());}}classGraduateStudentextendsStudent{}classStudentextendsPerson{publicStringtoString(){return"Student";}}classPerson{publicStringtoString(){return"Person";}}instanceofoperatorsinstanceofcanbeusedtocheckwhetheranobjectisaninstanceoftheclass.ManagerSecretaryProgrammerEmployee
publicvoidmethod(Employeee){if(einstanceofManager){……}elseif(einstanceofSecretary){……}elseif(einstanceofProgrammer){……}else{……}}CastingObjects(造型)Castingcanalsobeusedtoconvertanobjectofanobjectofoneclasstypetoanotherwithinaninheritancehierarchy.CastingObjectscanbedividedinto:Implicitcasting(自動類型轉(zhuǎn)換)Explicitcasting(強(qiáng)制類型轉(zhuǎn)換)Notes:Forthecastingtobesuccessful,youmustmakesurethattheobjecttobecastisaninstanceofthesubclass.OtherwisearuntimeClassCastExceptionoccurs.m(newstudent());Objecto=newstudent();m(o);ImplicitcastingStudentb=o;Studentb=(Student)o;ExplicitcastingEmployeestaff[]=newEmployee[3];Managerboss1=newManager(“0001”,1000,newDate(1987,6,6));staff[0]=boss1;Managerboss=(Manager)staff(0);staff[1]=newEmployee(“l(fā)i”,1200,newDate(1986,5,6));boss=(Manager)staff[1];會產(chǎn)生異常If(staff[1]instanceofManager)boss=(Manager)staff[1];注意:造型應(yīng)盡量避免使用;造型發(fā)生在有繼承關(guān)系的類之間,否則會產(chǎn)生編譯錯誤。
MethodOverloading
在Java中,同一個方法名可以被定義多次,但要求參數(shù)表不能完全一樣。調(diào)用方法時,編譯器通過方法名、參數(shù)個數(shù)和類型確定所調(diào)用的具體方法。這種現(xiàn)象叫做方法或函數(shù)的重載。
注意:方法的返回值類型不能用來區(qū)分重載的方法。方法重載可以實現(xiàn)Java的編譯時多態(tài)。例3.5方法重載實例1importjava.awt.Graphics;importjava.applet.Applet;publicclassMethodOverloadextendsApplet{publicvoidpaint(Graphicsg){g.drawString("Thesquareofinteger17is"+square(17),25,25);g.drawString("Thesquareofdouble17.5is"+square(17.5),25,40);}
intsquare(intx){returnx*x;}
doublesquare(doubley){returny*y;}}例3.6方法重載實例2publicclassOverload{voidreceive(inti){System.out.println("一個整數(shù):");System.out.println("i="+i);}voidreceive(inti,intj){System.out.println("兩個整數(shù):");System.out.println("i="+i+"\tj="+j);}voidreceive(doublei){System.out.println("一個浮點數(shù):");System.out.println("i="+i);}voidreceive(Strings){System.out.println("一個字符串:");System.out.println("s="+s);}publicstaticvoidmain(Stringargs[]){OverloadM1=newOverload();M1.receive(1);M1.receive(2,3);M1.receive(12.354);M1.receive("OK");}}7.Constructor構(gòu)造方法是類的一種特殊的方法,用于為類的新創(chuàng)建的對象分配內(nèi)存空間和進(jìn)行初始化,只能在創(chuàng)建對象時使用;構(gòu)造方法名必須與其類名相同;構(gòu)造方法沒有返回值,但可以有參數(shù);用戶不能直接調(diào)用構(gòu)造方法,而必須通過關(guān)鍵字new來調(diào)用它;一個類可以有多個不同的構(gòu)造方法,不同的構(gòu)造方法通過它們不同的形參個數(shù)或不同的參數(shù)類型來區(qū)分。重載的構(gòu)造方法目的是使類對象具有不同的初始值,為類對象的初始化提供方便。classRectangle{ protectedintwidth; protectedintheight;
Rectangle() { width=20;height=30;}
Rectangle(intw,inth)
{width=w;height=h;}
Rectangle(Rectangler)
{width=r.width();height=r.height();}publicintwidth(){returnwidth;}publicintheight(){returnheight;}}DefaultConstructor(默認(rèn)構(gòu)造方法)
當(dāng)類中沒有定義任何構(gòu)造方法時,系統(tǒng)隱含提供默認(rèn)構(gòu)造方法。默認(rèn)構(gòu)造方法是一個沒有參數(shù)的特殊的構(gòu)造方法。注意:用缺省構(gòu)造方法初始化對象時,先用類定義時對變量域給出的初始值初始化變量域,如果類定義時沒有給變量域賦初值,則由系統(tǒng)用缺省值初始化對象的成員變量。如果類中定義了構(gòu)造方法,但沒有定義沒有參數(shù)的構(gòu)造方法,這時如采用沒有參數(shù)的構(gòu)造方法去初始化對象會產(chǎn)生編譯錯誤。例如:classTempA{inta=10;intb;method1(……){……}……}……TempAA=newTempA();對象A的屬性變量a的值為10,而b的值為0;例3.6main方法實例publicclassMainTest{publicstaticvoidmain(Stringargs[]){intn=args.length;if(n==0)System.out.println("noparament!");else{System.out.println("numberofparaments:"+n);for(inti=0;i<n;i++)System.out.println("args["+i+"]="+args[i]);}}}ConclusionsforMethods一個類或?qū)ο罂梢杂卸鄠€方法方法用于表示對象的行為,是完成某種功能的程序塊。方法的聲明只能在類中進(jìn)行在程序設(shè)計時盡量充分利用Java類庫中的和自己以前編寫好的方法,從而使程序設(shè)計工作就會變得較為輕松。重新回到類的定義9.AbstractMethod(抽象方法)and
AbstactClass(抽象類)用abstract修飾的類被稱為抽象類。它的主要用途是用來描述概念性的內(nèi)容,這樣可以提高開發(fā)效率,更好地統(tǒng)一用戶接口。用abstract修飾的方法稱為抽象方法。表明該方法是一個抽象的方法,即沒有方法體。必須在子類中具體描述方法的實現(xiàn)過程。抽象方法必須存在于抽象類之中。abstractclassA{abstractvoidshow();abstractvoidshow(inti);}classBextendsA{intx;voidshow(){System.out.println("x="+x);}voidshow(inti){x=i;System.out.println("x="+x);}}10.FinalClass(最終類)
final修飾符可以定義一個不能被繼承的類,即不能再有子類。Java.lang.System就是一個final類。final可以用來修飾變量、方法和類,其作用都是增強(qiáng)代碼的安全性。Caution---UsingClassesfromtheJavaLibraryEveryonewillfrequentlyusetheclassesintheJavalibrarytodevelopprograms.3.super
當(dāng)父類的成員變量、子類的成員變量和類中方法使用的局部變量三者同名,或其中的兩者同名時,可以使用關(guān)鍵字this和super來指定所要使用的變量。thiscanbeusedtoasssurrogatetorefertothecallingobject.Thekeywordsuper
referstothesuperclassoftheclassinwhichsuperappears.Itcanbeusedintwoways:Tocallasuperclassconstructor.Tocallasuperclassmethod.InthesubClass,toaccessthevariableinheritedfromthesuperClass.classA{intx;......}classBextendsA{intx;......voidm(){intx;......super.x=1;this.x=2;x=3;......}}設(shè)有類A和類B,類B是類A的子類;類A和類B中都聲明了成員變量x。另外,類B中含有方法m,方法m中聲明了局部變量x。于是,這里存在三個同名的變量:類A中的成員變量x,類B的成員變量x,以及方法m中的局部變量x。在類B的方法m中,可以用super.x,this.x和x分別表示上述三個變量。classSuperCa{intx;SuperCa(){ x=5;System.out.println("SuperCax="+x);} voiddoCa(){ System.out.println("SuperCa.doCa()");}}
classSubCaextendsSuperCa{intx;SubCa(){super();//調(diào)用父類的構(gòu)造方法x=8;System.out.println("SubCax=“+x);}voiddoCa(){super.doCa();//調(diào)用父類的方法System.out.println("insubCa.doCa()“);System.out.println("super.x=“+super.x);}}publicclassTest{publicstaticvoidmain(Stringargs[]){SubCaca=newSubCa();ca.doCa();}}程序運行結(jié)果:SuperCax=5SubCax=8SuperCa.doCa()subCa.doCa()super.x=5Conclusionsforsuper:super.variableName;super.methodName(arguments);super(arguments);3.4ObjectsAnobjectrepresentsanentityintherealworldthatcanbedistinctilyidentified.3.4.1ConstructingObjects1.Declaringthereferencevariable
ClassNameobjRefName;
Integeri;注意這里僅僅是定義了一個對象變量i,它并沒有引用任何一個對象,更談不上為對象分配存儲空間。因此,這時對i不能使用任何的Integer方法,否則會產(chǎn)生運行時錯誤,如System.out.println(i.maxValue())2.ConstructingObjects[ClassName]objRefName=newConstructor([arguments]);Integeri;i=newInteger(18);Notes:Areferencevariablerefertoanotherobjectthroughtheassign“=”,asshowsbelow.
Integerk=i;Anonymousobject.
StringS=newInteger(18).toString();Thedefaultvaluefornon-primitivedatatypeisnull.
Integerk=i;k=null;
18ki3.ObjectsInitializationInitializethevariblesofanobject.Defaultvalues;Initializewhendeclaringthevaribles;Blocksofinitialization;Definethespecialmethod;
classTempA{inta;……{a=10;……}……}
classPoint{x=0;y=0;……}publicclassStudent{Stringno;Stringname;voidsetStu(Strings1,Strings2){no=s1;name=s2;}voidshowStu(){System.out.println("nois"+no+"nameis"+name);}publicstaticvoidmain(Stringargs[]){Studentstu=newStudent();stu.setStu("0001","wang");stu.showStu();}}3.4.2UsingObjectsIncluding:AccessingandinvokingtheinstancevariablesandmethodsobjectName.variable
;objectName.method([argument]);將對象作為類的一個變量;PassingObjectstoMethods;ReturnanObjectfromthemethod;ArrayofObjects;classDate{ intyear; intmonth; intday; Date(intyear,intmonth,intday){ this.year=year; this.month=month; this.day=day; }voidshowDate(){ System.out.println(year+","+month+","+day);}}Exampleof將對象作為類的一個變量.publicclassStudent{ Stringno; Stringname; Datebirth; voidsetStu(Strings1,Strings2,inty,intm,intd){ no=s1; name=s2; birth=newDate(y,m,d); } voidshowStu(){ System.out.println("nois"+no+"nameis"+name); System.out.print("birthis"); birth.showDate(); } publicstaticvoidmain(Stringargs[]){ Studentstu=newStudent(); stu.setStu("0001","wang",1975,6,6); stu.showStu(); }}ExampleofReturnanObjectfromthemethodExampleofreturnninganObjectfromthemethodpublicclassStudent{ privateStringno; privateStringname;
privateDatebirth; voidsetStu(Strings1,Strings2,inty,intm,intd){ no=s1; name=s2; birth=newDate(y,m,d); } DategetBirth(){ returnbirth; } publicstaticvoidmain(Stringargs[]){ Studentstu=newStudent(); stu.setStu("0001","wang",1975,6,6); System.out.print("birth="); stu.getBirth().showDate(); }}3.4.3對象的清除對象的釋放指系統(tǒng)收回分配給對象的資源。Java中對象的釋放是自動完成的。Java運行系統(tǒng)具有所謂垃圾收集機(jī)制(thegarbagecollector),這種機(jī)制會周期性地檢測對象是否還在使用,如發(fā)現(xiàn)有長期不用的對象則給予釋放,回收這些對象占用的資源。3.5Polymorphism多態(tài),是指一個程序中同名的不同方法共存的情況。OverridingOverloading
3.6Interfaces
面向?qū)ο蟪绦蛟O(shè)計中繼承的種類:單一繼承多重繼承
僅僅單一繼承是不夠的,它不符合現(xiàn)實世界的實際情況;會導(dǎo)致根類Object越來越大,以至于難以管理。使得類的層次結(jié)構(gòu)不清楚;使得程序設(shè)計變得困難,如當(dāng)多個父類擁有同名成員和方法時,子類的行為不易確定。為了既可以實現(xiàn)多重繼承,又避免多重繼承的復(fù)雜和低效,Java提供了一種特殊的類型---接口。Aninterfaceisaclasslikeconstructthatcontainsonlyconstantsandabstractmethods.3.6.1DeclaringInterfaces[public]interfaceInterfaceName[extendsInterfaces]{typeName=value;……returnTypemethodName([arguments]);……}默認(rèn)具有public、final、static修飾符具有public、abstract修飾符接口定義小結(jié):ⅰ.接口定義包含兩部分:接口聲明和接口體;ⅱ.接口名常和類名一樣,除首字母大寫通常以-able或-ible結(jié)尾,表明接口能完成的行為;ⅲ.public表明任意類均可以使用接口,而缺省表明只能有與該接口定義在同一個包中的類才能訪問該接口;ⅳ.接口間可以存在繼承關(guān)系,與類的聲明不同的是一個接口可以有多個父接口,其間用“,”分隔。ⅴ.定義的常量默認(rèn)具有public、final、static修飾符;ⅵ.接口中方法沒有方法體,且具有public、abstract。ⅶ.如果在子接口中定義和父接口同名的常量或相同的方法,則父接口中的常量被隱藏,方法被重寫。3.6.2ImplimentingInterfaces
在Java中,通常把對接口功能的“繼承”稱為“實現(xiàn)”。
類的聲明中用implements子句來表示一個類實現(xiàn)了某個接口,在類體中可以使用接口中定義的常量,而且必須實現(xiàn)接口中定義的所有方法。一個類可以實現(xiàn)多個接口,其間用“,”隔開。例3.8接口實現(xiàn)實例1interfaceA{doubleg=9.8;voidshow();}classBimplementsA{publicvoidshow(){System.out.println(“g=“+g);}}classInterfaceTest{publicstaticvoidmain(Stringargs[]){Bb=newB();b.show();}}例3.9接口實現(xiàn)實例2interfaceAccess{voidput(charc);charget();}classStackimp
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版高考英語大二輪復(fù)習(xí)語言知識運用練一
- 教學(xué)設(shè)計《威尼斯的小艇》
- 加工承攬安全合同范例
- 中介房屋托管合同范例
- 加工粉料合同范例
- 辦公家具定制合同范例
- 辦公區(qū)清潔合同范例
- 2025年半自動精密印刷機(jī)合作協(xié)議書
- 楊木水解液木質(zhì)素的烯基改性及其在功能材料中的應(yīng)用
- 深度翻譯理論視角下《春秋史》(節(jié)選)漢英翻譯實踐報告
- 貴州區(qū)域地質(zhì)地史概述
- Aptitude態(tài)度的重要性
- 《推薦》500kV輸電線路應(yīng)急處置預(yù)案6個
- 麗聲北極星分級繪本第三級下 The Class Trip 課件
- 放射性元素的衰變
- 第一課想聽聽我的忠告嗎
- 高英Lesson3 Pub Talk and the King27s English
- 防洪堤防工程堤頂高程的計算表
- 古詩詞常見題材之思鄉(xiāng)懷人詩鑒賞
- 《平方差公式(1)》導(dǎo)學(xué)案
- 等保三級基線要求判分標(biāo)準(zhǔn)v10
評論
0/150
提交評論