




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第四章類、對象和接口第四章類、對象和接口14.2對象類是創建對象的模板創建對象:對象的聲明為對象分配內存4.2對象類是創建對象的模板24.2對象1、對象的聲明:格式:類的名字對象名字;如:PeoplezhangPing;4.2對象1、對象的聲明:34.2對象2、為聲明的對象分配內存:使用new運算符和類的構造方法為聲明的對象分配內存,如果類中沒有構造方法,系統會調用默認的構造方法(默認的構造方法是無參數的)。如:zhangPing=newPeople();4.2對象2、為聲明的對象分配內存:44.2對象classXiyoujiRenwu{ floatheight,weight; Stringhead,ear,hand,foot,mouth; voidspeak(Strings) {System.out.println(s);}}classA{ publicstaticvoidmain(Stringargs[]) { XiyoujiRenwuzhubajie; //聲明對象 zhubajie=newXiyoujiRenwu(); //為對象分配內存,使用new運算符和默認的構造方法 }}例:14.2對象classXiyoujiRenwu例:154.2對象classPoint{intx,y;Point(inta,intb){x=a;y=b;}}publicclassA{publicstaticvoidmain(Stringargs[]){Pointp1,p2;//聲明對象p1和p2。p1=newPoint(10,10);//為對象分配內存,使用new和類中的構造方法。p2=newPoint(23,35);//為對象分配內存,使用new和類中的構造方法。}}例:24.2對象classPoint例:26練習用課本P45類梯形創建一個名為“tx”的對象練習用課本P45類梯形創建一個名為“tx”的對象74.2對象3、對象的內存模型:聲明對象時的內存模型聲明對象變量后,變量內存無數據,是空對象,不能使用如:XiyoujiRenwuzhubajie;zhubajie4.2對象3、對象的內存模型:zhubajie84.2對象3、對象的內存模型:對象分配內存后的內存模型為成員變量分配內存返回一個應用給對象變量如zhubajie=newXiyoujiRenwu();0.00.0nullnullnullnullnull0xAB12zhubajieweightheightheadearmouthhandfoot4.2對象3、對象的內存模型:0.00.0nullnull94.2.2使用對象使用運算符“.”,對象實現對自己的變量訪問和方法的調用對象操作自己的變量(對象的屬性)對象創建后,就有自己的變量。通過使用運算符“.”對象實現對自己變量的訪問。對象調用類中的方法(對象的功能)采用“.”調用創建它的類中的方法。當對象調用類中的一個方法時,方法中的局部變量被分配到內存空間4.2.2使用對象使用運算符“.”,對象實現對自己的變104.2.2使用對象classXiyoujiRenwu{floatheight,weight;Stringhead,ear,hand,foot,mouth;voidspeak(Strings){head="歪著頭";System.out.println(s);}}publicclassExample{publicstaticvoidmain(Stringargs[]){XiyoujiRenwuzhubajie,sunwukong;//聲明對象。zhubajie=newXiyoujiRenwu();//為對象分配內存,使用new運算符和默認構造方法。sunwukong=newXiyoujiRenwu();zhubajie.height=1.80f;//對象給自己的變量賦值。
4.2.2使用對象classXiyoujiRenwu11zhubajie.weight=160f;zhubajie.hand="兩只黑手";zhubajie.foot="兩只大腳";zhubajie.head="大頭";zhubajie.ear="一雙大耳朵";zhubajie.mouth="一只大嘴";sunwukong.height=1.62f;//對象給自己的變量賦值。sunwukong.weight=1000f;sunwukong.hand="白嫩小手";sunwukong.foot="兩只繡腳";sunwukong.head="繡發飄飄";sunwukong.ear="一對小耳";sunwukong.mouth="櫻桃小嘴";System.out.println("zhubajie的身高:"+zhubajie.height);System.out.println("zhubajie的頭:"+zhubajie.head);System.out.println("sunwukong的重量:"+sunwukong.weight);System.out.println("sunwukong的頭:"+sunwukong.head);zhubajie.speak("俺老豬我想娶媳婦");//對象調用方法。System.out.println("zhubajie現在的頭:"+zhubajie.head);sunwukong.speak("老孫我重1000斤,我想騙八戒背我");//對象調用方法。System.out.println("sunwukong現在的頭:"+sunwukong.head);}}zhubajie.weight=160f;124.2.2使用對象類中的方法可以操作成員變量,當對象調用該方法時,方法中出現的成員變量就是指該對象的成員變量。4.2.2使用對象類中的方法可以操作成員變量,當對象調用該13練習打印梯形的面積:(上底為2.0,下底為5.0,高為3.0)用課本P45梯形類練習打印梯形的面積:(上底為2.0,下底為5.0,高為3.0144.2.3對象的應用和實體當用類創建一個對象時,類中的成員變量被分配內存空間,這些內存空間被稱作該對象的實體。對象中存放著應用,確保實體由該對象操作使用。4.2.3對象的應用和實體當用類創建一個對象時,類中的成員154.2.3對象的應用和實體如:Pointp1=newPoint(12,16);Pointp2=newPoint(6,18);p1=p2;12166180xAB280xDD618XyXyXy0xDD0xDDp1p2p2p14.2.3對象的應用和實體如:12166180xAB280164.2.3對象的應用和實體例4:class圓{double半徑;圓(doubler){半徑=r;}double計算面積(){return3.14*半徑*半徑;}void修改半徑(double新半徑){半徑=新半徑;}double獲取半徑(){return半徑;}}4.2.3對象的應用和實體例4:174.2.3對象的應用和實體class圓錐{圓底圓;double高;圓錐(圓circle,doubleh){this.底圓=circle;this.高=h;}double計算體積(){doublevolume;volume=底圓.計算面積()*高/3.0;returnvolume;}void修改底圓半徑(doubler){底圓.修改半徑(r);}double獲取底圓半徑(){return底圓.獲取半徑();}}4.2.3對象的應用和實體class圓錐184.2.3對象的應用和實體classExample{publicstaticvoidmain(Stringargs[]){圓circle=new圓(10);圓錐circular=new圓錐(circle,20);System.out.println("圓錐底圓半徑:"+circular.獲取底圓半徑());System.out.println("圓錐的體積:"+circular.計算體積());circular.修改底圓半徑(100);System.out.println("圓錐底圓半徑:"+circular.獲取底圓半徑());System.out.println("圓錐的體積:"+circular.計算體積());}}4.2.3對象的應用和實體classExample194.3static關鍵字1、實例變量和類變量的區別不同對象的實例變量將被分配不同的內存空間,如果類中的成員變量有類變量,那么所有對象的這個類變量都分配給相同的一處內存,改變其中一個對象的這個類變量會影響其它對象的這個類變量。也就是說對象共享類變量4.3static關鍵字1、實例變量和類變量的區別204.3static關鍵字例子5class梯形{float上底,高;staticfloat下底;//類變量。梯形(float上底,float高){this.上底=上底;this.高=高;}float獲取上底(){return上底;}float獲取下底(){return下底;}}4.3static關鍵字例子5214.3static關鍵字classExample4_5{publicstaticvoidmain(Stringargs[]){梯形laderOne,laderTwo;//梯形的字節碼被加載到內存。梯形.下底=60;//通過類名操作類變量。laderOne=new梯形(18.0f,20);laderTwo=new梯形(9.0f,10);System.out.println("laderOne的上底:"+laderOne.獲取上底());System.out.println("laderOne的下底:"+laderOne.獲取下底());System.out.println("laderTwo的上底:"+laderTwo.獲取上底());System.out.println("laderTwo的下底:"+laderTwo.獲取下底());}}4.3static關鍵字classExample4_5224.3static關鍵字2、實例方法和類方法的區別當類的字節碼文件被加載到內存時,類的實例方法不會被分配入口地址,當該類創建對象后,類中的實例方法才分配入口地址,從而實例方法可以被類創建的任何對象調用執行。類中的類方法,在該類被加載到內存時,就分配了相應的入口地址。4.3static關鍵字2、實例方法和類方法的區別234.4this關鍵字1、this關鍵字可以出現在類的實例方法中,代表使用該方法的當前對象。2、this關鍵字出現在類的構造方法中,代表使用該構造方法所創建的對象。實例方法可以操作類的成員變量。格式:this.成員變量4.4this關鍵字1、this關鍵字可以出現在類的實例方244.4this關鍵字如:classA{ intx; voidf() { this.x=100; }}//此例子沒有同名的成員變量和局部變量,this可以省略4.4this關鍵字如:254.4this關鍵字如:classB{ voidf() { this.g(); } voidg() { System.out.println(“OK”); }}//此例子中this代表使用方法f的當前對象,方法發f的方法體中this.g()就是當前對象調用方法g.一個方法調用另一個方法時可以省略方法名字前面的this4.4this關鍵字如:264.5包1、包語句通過關鍵字package聲明包語句。package作為Java源文件的第一條語句。package語句的一般格式:package包名;如:packagesunrise;package;4.5包1、包語句274.5包如果源程序中省略了package語句,源文件所定義命名的類被隱含地認為是無名包的一部分——即源文件中定義命名的類在同一個包中,但該包沒有名字。4.5包如果源程序中省略了package語句,源文件所定義284.5包程序如果使用了包語句,就必須有相應的目錄結構。如:packagetom.jafei;則目錄結構必須包含如下結構:……\tom\jiafei4.5包程序如果使用了包語句,就必須有相應的目錄結構。294.5包例6:packagetom.jiafei;publicclassExample4_6{publicstaticvoidmain(Stringargs[]){System.out.println("我有包名");}}4.5包例6:packagetom.jiafei;304.5包2、import語句使用import語句可以引入包中的類。在一個java源程序中可以有多個import語句,他們必須寫在package語句和源文件中的類的定義之間4.5包2、import語句314.5包2、import語句Java提供的包有很多,約130多個如:java.applet 包含所有實現javaapplet的類java.awt 包含抽象窗口工具集中的圖形、文本、窗口GUI類java.awt.image包含抽象窗口工具集中的圖像處理類java.lang 包含所有基本語言類java.io 包含所有的輸入/輸出類 包含所有實現網絡功能的類java.until 包含有用的數據類型類4.5包2、import語句324.5包引入類:如果要引入一個包中的全部類,則可以用星號來代替如:importjava.awt.*;只引入一個確定的類,則直接寫明引用如:importjava.until.Date4.5包引入類:334.5包例7:importjava.applet.Applet;importjava.awt.*;publicclassExampleextendsApplet{Buttonredbutton;publicvoidinit(){redbutton=newButton("我是一個紅色的按鈕");redbutton.setBackground(Color.red);add(redbutton);}publicvoidpaint(Graphicsg){g.drawString("itisabutton",30,50);}}4.5包例7:importjava.applet.App34例8importtom.jiafei.*;classExample4_8{publicstaticvoidmain(Stringargs[]){Trangletrangle=newTrangle(12,3,1);trangle.計算面積();trangle.修改三邊(3,4,5);trangle.計算面積();}}例8importtom.jiafei.*;354.6訪問權限1.私有變量和私有方法2.共有變量和共有方法3.友好變量和友好方法4.受保護成員變量和方法5.public類與友好類4.6訪問權限1.私有變量和私有方法364.6訪問權限1.私有變量和私有方法 用關鍵字private修飾的成員變量和方法被稱為私有變量和私有方法如:classTom{ privatefloatweight;//weight私有的float變量 privatefloatf(floata,floatb)//方法f是私有方法 {… } ……}4.6訪問權限1.私有變量和私有方法classTom374.6訪問權限對于私有成員變量或方法,在另外一個類中,不能操作這個私有變量或方法,只有在本類中創建該類的對象的時候,才能訪問自己的私有變量和類中的私有方法。classJerry{ voidg() { Tomcat=newTom(); cat.weight=23f; //非法 cat.f(3f,4f); //非法 }}4.6訪問權限對于私有成員變量或方法,在另外一個類中,不能384.6訪問權限classExample4_9{privateintmoney;Example4_9(){money=2000;}privateintgetMoney(){returnmoney;}publicstaticvoidmain(Stringargs[]){Example4_9exa=newExample4_9();exa.money=3000;intm=exa.getMoney();System.out.println("money="+m);}}類中訪問自己的私有成員變量和私有方法4.6訪問權限classExample4_9類中訪問自394.6訪問權限2.共有變量和共有方法 用關鍵字public修飾的成員變量和方法被稱為共有變量和共有方法如:classTom{ publicfloatweight;//weight共有的float變量 publicfloatf(floata,floatb)//方法f是共有方法 {… } ……}4.6訪問權限2.共有變量和共有方法classTom404.6訪問權限對于共有成員變量或方法,在另外一個類中,能操作這個變量或方法。classJerry{ voidg() { Tomcat=newTom(); cat.weight=23f; //合法 cat.f(3f,4f); //合法 }}4.6訪問權限對于共有成員變量或方法,在另外一個類中,能操414.6訪問權限3.友好變量和方法 不用private、public、protected修飾的成員變量和方法被稱為友好變量和友好方法。如:classTom{ floatweight;//weight友好的float變量 floatf(floata,floatb)//方法f是友好方法 {… } ……}4.6訪問權限3.友好變量和方法classTom424.6訪問權限在同一個包中,那么能訪問自己的友好變量和友好方法。classJerry{ voidg() { Tomcat=newTom(); cat.weight=23f; //合法 cat.f(3f,4f); //合法 }}4.6訪問權限在同一個包中,那么能訪問自己的友好變量和友好434.6訪問權限4.受保護的成員變量和方法 用關鍵字protected修飾的成員變量和方法被稱為受保護的成員變量和受保護的方法如:classTom{ protectedfloatweight;//weight受保護的float變量 protectedfloatf(floata,floatb)//方法f是受保護的方法 {… } ……}4.6訪問權限4.受保護的成員變量和方法classTom444.6訪問權限當在另外一個類中用類Tom創建一個對象后,如果這個類與類Tom在同一個包中,那么該對象能訪問自己的protected變量和方法.也可以通過類名訪問classJerry{ voidg() { Tomcat=newTom(); cat.weight=23f; //合法 cat.f(3f,4f); //合法 }}4.6訪問權限當在另外一個類中用類Tom創建一個對象后,如454.6訪問權限5.public類與友好類 類聲明時,如果在關鍵字class前面加上public關鍵字,就稱這樣類是一個public類如:publicclassA{……}如果一個類不加public修飾,則為友好類如:classA {… }4.6訪問權限5.public類與友好類464.6訪問權限5.public類與友好類 不能用protected和private修飾類訪問權限的排列:public、protected、友好的、private4.6訪問權限5.public類與友好類474.7類的繼承繼承是一種用已有類創建新類的機制。新類繼承一般類的狀態和行為,并根據需要增加它自己的新的狀態和行為。由繼承而得到的類成為子類,被繼承的類稱為父類(超類)。Java不支持多重繼承(子類只能有一個父類)4.7類的繼承繼承是一種用已有類創建新類的機制。484.7類的繼承1.創建子類在聲明中,使用關鍵字extends來創建一個類的子類,格式:class子類名extends父類名{……}4.7類的繼承1.創建子類class子類名extend494.7類的繼承1.創建子類例:把Student聲明為People的子類,People是Students的父類.classStudentextendsPeople{……}4.7類的繼承1.創建子類classStudentex504.7類的繼承2.子類的繼承性子類繼承父類的成員變量繼承父類的方法.4.7類的繼承2.子類的繼承性514.7類的繼承2.子類的繼承性子類和父類在同一包種的繼承性如果子類和父類在同一個包中,那么子類自然地繼承了其父類中不是private的成員變量作為自己的成員變量,并且也自然地繼承了父類中不是private的方法作為自己的方法.繼承的成員或方法的訪問權限保持不變.4.7類的繼承2.子類的繼承性52classFather{privateintmoney;intweight=100;Stringspeak(Strings){returns;}}classSonextendsFather{Stringhand;voidf(){weight=200;System.out.println(weight);}}classSuiziextendsSon{Stringfoot;}classFather53publicclassExample4_10{publicstaticvoidmain(Stringargs[]){Sonson=newSon();Suizisunzi=newSuizi();son.hand="兩只手";sunzi.hand="兩小只手";sunzi.foot="兩只腳";System.out.println(son.hand);son.f();System.out.println(sunzi.weight+":"+sunzi.hand+":"+sunzi.foot);System.out.println(sunzi.speak("我是孫子"));}}publicclassExample4_10544.7類的繼承2.子類的繼承性子類和父類不在同一包種的繼承性如果子類和父類不在同一個包中,那么子類繼承了父類的protected、public成員變量作為子類的成員變量,并且繼承了父類的protected、public方法為子類的方法。繼承的成員或方法的訪問權限保持不變.如果子類和父類不在同一個包里,子類不能繼承父類的友好變量和友好方法。4.7類的繼承2.子類的繼承性55Father.java:packagetom.jiafei;publicclassFather{intheight;protectedintmoney=120;publicintweight;protectedintgetMoney(){returnmoney;}voidsetMoney(intnewMoney){money=newMoney;}}Father.java:packagetom.jiafei56Jerry.javapackage;importtom.jiafei.Father;publicclassJerryextendsFather//Jerry和Father在不同的包中.{voidf(){money=1000;//合法,//height=1.89f;//非法,因為Jerry沒有繼承友好的heightSystem.out.println(money);//輸出結果是1000。//setMoney(300);//非法,因為Jerry沒有繼承友好的方法setMnumber=getMoney();//合法.System.out.println(number);//輸出結果是1000。}publicstaticvoidmain(Stringargs[]){Jerryjerry=newJerry();jerry.f();}}Jerry.javapackage;574.7類的繼承2.子類的繼承性protected的進一步說明一個類A中的protected成員變量和方法可以被它的直接子類和間接子類繼承,如:B是A的子類,C是B的子類,D又是C的子類,那么B、C和D類都繼承了A的protected成員變量和方法。如果用D類在D本身中創建了一個對象,那么該對象總是可以通過“.”運算符訪問繼承的或自己定義的protected變量和protected方法。如果在另外一個類中,比如Other類,用D類創建了一個對象object,該對象通過“.”運算符訪問protected變量和protected方法的權限如下:4.7類的繼承2.子類的繼承性584.7類的繼承如果在另外一個類中,比如Other類,用D類創建了一個對象object,該對象通過“.”運算符訪問protected變量和protected方法的權限如下:子類D中親自聲明的protected成員變量和方法,不可能是從別的類繼承來的,object訪問這些非繼承的protected成員變量和方法時,只要Other類和D類在同一個包中就可以如果子類D的對象的protected成員變量或protected方法是從父類繼承的,那么就要一直追溯到該protected成員變量或方法的“祖先”類,即A類。如果Other類和A類在同一個包,object對象能訪問繼承的protected變量和protected方法。4.7類的繼承如果在另外一個類中,比如Other類,用D類59A.java:packagetom.jiafei;publicclassA{protectedintx=120;protectedvoidfA(){System.out.println("我是A類中的protected方法");System.out.println("x="+x);}}A.java:60B.java:package;importtom.jiafei.A;publicclassBextendsA{protectedvoidfB(){System.out.println("我是B類中自己定義的方法");}publicstaticvoidmain(Stringargs[]){Bb=newB();//對象b在B類中.b.x=1000;//合法.b.fA();//合法.b.fB();//合法.}}B.java:package;61DL.java
package;import.B;publicclassDL{publicstaticvoidmain(Stringargs[]){Bb=newB();//對象b在DL類中.b.x=1000;//非法,因為對象b的成員變量x是從A類繼承的,但DL和A不在同一包中.b.fA();//非法.因為方法fA是B類從A類繼承的protected方法,但DL和A不在同一包中.b.fB();//合法,因為方法fB是B類中自己定義的protected方法,DL類和B類在同一包中.}}DL.javapackage;62Example.java
packagetom.jiafei;import.B;publicclassExample{publicstaticvoidmain(Stringargs[]){Bb=newB();//對象b在Example類中.b.x=1000;//合法,因為對象b的成員變量x是從A類繼承的,而Example和A在同一包中.b.fA();//合法.因為方法fA是B類從A類繼承的protected方法,而Example和A在同一包中.b.fB();//非法,因為方法fB是B類中自己定義的protected方法,但Example類和B類不在同一包中.}}aExample.java
packagetom.jiafe634.7類的繼承3.成員變量的隱藏和方法的重寫成員變量隱藏:如果在子類中定義的成員變量和父類的成員變量同名時,則父類中的成員變量不能被繼承,此時稱為子類的成員變量隱藏了父類的成員變量。方法重寫:如果子類中定義了一個方法,并且這個方法的名字、返回類型以及參數個數和類型同父類的某個方法完全相同,父類的這個方法將被隱藏,則稱重寫父類的方法。4.7類的繼承3.成員變量的隱藏和方法的重寫644.7類的繼承3.成員變量的隱藏和方法的重寫子類通過成員變量的隱藏和方法的重寫可以把父類的狀態和行為改變成為自身的狀態和行為。4.7類的繼承3.成員變量的隱藏和方法的重寫65例子12importjava.applet.*;importjava.awt.*;classA{privateintnumber=100;floatf(intx,inty){returnx+y;}floatg(floatx,floaty){returnx+y+number;}}例子12importjava.applet.*;66classBextendsA{floatf(intx,inty){returnx*y;}}publicclassExample{publicstaticvoidmain(Stringargs[]){Bb=newB();System.out.println(b.f(2,5));//調用重寫的方法。System.out.println(b.g(2,5));//b調用繼承的父類的方法。}}classBextendsA674.7類的繼承3.成員變量的隱藏和方法的重寫重寫父類的方法時,不能降低方法的訪問權限。4.7類的繼承3.成員變量的隱藏和方法的重寫68importjava.applet.*;importjava.awt.*;classA{privateintnumber=100;protectedfloatf(intx,inty){returnx+y;}floatg(floatx,floaty){returnx+y+number;}}importjava.applet.*;69classBextendsA{floatf(intx,inty){returnx*y;}}classBextendsA70classCextendsA{publicfloatf(intx,inty)//合法,沒有降低訪問級別{returnx-y;}}classCextendsA714.7類的繼承4.final類final方法Final類不能被繼承,即不能有子類FinalclassA{……}A就是一個final類。出于安全的考慮,將一些類修飾為final類。如果一個方法被修飾為final方法,則這個方法不能被重寫。如果一個成員變量被修飾為final,就是常量。4.7類的繼承4.final類final方法72作業包語句的格式是什么?包語句在Java源文件什么位置?如何引入包中的類?用public、protected、友好的、private修飾的方法訪問權限的級別排列順序是怎樣的?什么是類的繼承?Java是否支持多重繼承?作業包語句的格式是什么?包語句在Java源文件什么位置?73第四章類、對象和接口第四章類、對象和接口744.2對象類是創建對象的模板創建對象:對象的聲明為對象分配內存4.2對象類是創建對象的模板754.2對象1、對象的聲明:格式:類的名字對象名字;如:PeoplezhangPing;4.2對象1、對象的聲明:764.2對象2、為聲明的對象分配內存:使用new運算符和類的構造方法為聲明的對象分配內存,如果類中沒有構造方法,系統會調用默認的構造方法(默認的構造方法是無參數的)。如:zhangPing=newPeople();4.2對象2、為聲明的對象分配內存:774.2對象classXiyoujiRenwu{ floatheight,weight; Stringhead,ear,hand,foot,mouth; voidspeak(Strings) {System.out.println(s);}}classA{ publicstaticvoidmain(Stringargs[]) { XiyoujiRenwuzhubajie; //聲明對象 zhubajie=newXiyoujiRenwu(); //為對象分配內存,使用new運算符和默認的構造方法 }}例:14.2對象classXiyoujiRenwu例:1784.2對象classPoint{intx,y;Point(inta,intb){x=a;y=b;}}publicclassA{publicstaticvoidmain(Stringargs[]){Pointp1,p2;//聲明對象p1和p2。p1=newPoint(10,10);//為對象分配內存,使用new和類中的構造方法。p2=newPoint(23,35);//為對象分配內存,使用new和類中的構造方法。}}例:24.2對象classPoint例:279練習用課本P45類梯形創建一個名為“tx”的對象練習用課本P45類梯形創建一個名為“tx”的對象804.2對象3、對象的內存模型:聲明對象時的內存模型聲明對象變量后,變量內存無數據,是空對象,不能使用如:XiyoujiRenwuzhubajie;zhubajie4.2對象3、對象的內存模型:zhubajie814.2對象3、對象的內存模型:對象分配內存后的內存模型為成員變量分配內存返回一個應用給對象變量如zhubajie=newXiyoujiRenwu();0.00.0nullnullnullnullnull0xAB12zhubajieweightheightheadearmouthhandfoot4.2對象3、對象的內存模型:0.00.0nullnull824.2.2使用對象使用運算符“.”,對象實現對自己的變量訪問和方法的調用對象操作自己的變量(對象的屬性)對象創建后,就有自己的變量。通過使用運算符“.”對象實現對自己變量的訪問。對象調用類中的方法(對象的功能)采用“.”調用創建它的類中的方法。當對象調用類中的一個方法時,方法中的局部變量被分配到內存空間4.2.2使用對象使用運算符“.”,對象實現對自己的變834.2.2使用對象classXiyoujiRenwu{floatheight,weight;Stringhead,ear,hand,foot,mouth;voidspeak(Strings){head="歪著頭";System.out.println(s);}}publicclassExample{publicstaticvoidmain(Stringargs[]){XiyoujiRenwuzhubajie,sunwukong;//聲明對象。zhubajie=newXiyoujiRenwu();//為對象分配內存,使用new運算符和默認構造方法。sunwukong=newXiyoujiRenwu();zhubajie.height=1.80f;//對象給自己的變量賦值。
4.2.2使用對象classXiyoujiRenwu84zhubajie.weight=160f;zhubajie.hand="兩只黑手";zhubajie.foot="兩只大腳";zhubajie.head="大頭";zhubajie.ear="一雙大耳朵";zhubajie.mouth="一只大嘴";sunwukong.height=1.62f;//對象給自己的變量賦值。sunwukong.weight=1000f;sunwukong.hand="白嫩小手";sunwukong.foot="兩只繡腳";sunwukong.head="繡發飄飄";sunwukong.ear="一對小耳";sunwukong.mouth="櫻桃小嘴";System.out.println("zhubajie的身高:"+zhubajie.height);System.out.println("zhubajie的頭:"+zhubajie.head);System.out.println("sunwukong的重量:"+sunwukong.weight);System.out.println("sunwukong的頭:"+sunwukong.head);zhubajie.speak("俺老豬我想娶媳婦");//對象調用方法。System.out.println("zhubajie現在的頭:"+zhubajie.head);sunwukong.speak("老孫我重1000斤,我想騙八戒背我");//對象調用方法。System.out.println("sunwukong現在的頭:"+sunwukong.head);}}zhubajie.weight=160f;854.2.2使用對象類中的方法可以操作成員變量,當對象調用該方法時,方法中出現的成員變量就是指該對象的成員變量。4.2.2使用對象類中的方法可以操作成員變量,當對象調用該86練習打印梯形的面積:(上底為2.0,下底為5.0,高為3.0)用課本P45梯形類練習打印梯形的面積:(上底為2.0,下底為5.0,高為3.0874.2.3對象的應用和實體當用類創建一個對象時,類中的成員變量被分配內存空間,這些內存空間被稱作該對象的實體。對象中存放著應用,確保實體由該對象操作使用。4.2.3對象的應用和實體當用類創建一個對象時,類中的成員884.2.3對象的應用和實體如:Pointp1=newPoint(12,16);Pointp2=newPoint(6,18);p1=p2;12166180xAB280xDD618XyXyXy0xDD0xDDp1p2p2p14.2.3對象的應用和實體如:12166180xAB280894.2.3對象的應用和實體例4:class圓{double半徑;圓(doubler){半徑=r;}double計算面積(){return3.14*半徑*半徑;}void修改半徑(double新半徑){半徑=新半徑;}double獲取半徑(){return半徑;}}4.2.3對象的應用和實體例4:904.2.3對象的應用和實體class圓錐{圓底圓;double高;圓錐(圓circle,doubleh){this.底圓=circle;this.高=h;}double計算體積(){doublevolume;volume=底圓.計算面積()*高/3.0;returnvolume;}void修改底圓半徑(doubler){底圓.修改半徑(r);}double獲取底圓半徑(){return底圓.獲取半徑();}}4.2.3對象的應用和實體class圓錐914.2.3對象的應用和實體classExample{publicstaticvoidmain(Stringargs[]){圓circle=new圓(10);圓錐circular=new圓錐(circle,20);System.out.println("圓錐底圓半徑:"+circular.獲取底圓半徑());System.out.println("圓錐的體積:"+circular.計算體積());circular.修改底圓半徑(100);System.out.println("圓錐底圓半徑:"+circular.獲取底圓半徑());System.out.println("圓錐的體積:"+circular.計算體積());}}4.2.3對象的應用和實體classExample924.3static關鍵字1、實例變量和類變量的區別不同對象的實例變量將被分配不同的內存空間,如果類中的成員變量有類變量,那么所有對象的這個類變量都分配給相同的一處內存,改變其中一個對象的這個類變量會影響其它對象的這個類變量。也就是說對象共享類變量4.3static關鍵字1、實例變量和類變量的區別934.3static關鍵字例子5class梯形{float上底,高;staticfloat下底;//類變量。梯形(float上底,float高){this.上底=上底;this.高=高;}float獲取上底(){return上底;}float獲取下底(){return下底;}}4.3static關鍵字例子5944.3static關鍵字classExample4_5{publicstaticvoidmain(Stringargs[]){梯形laderOne,laderTwo;//梯形的字節碼被加載到內存。梯形.下底=60;//通過類名操作類變量。laderOne=new梯形(18.0f,20);laderTwo=new梯形(9.0f,10);System.out.println("laderOne的上底:"+laderOne.獲取上底());System.out.println("laderOne的下底:"+laderOne.獲取下底());System.out.println("laderTwo的上底:"+laderTwo.獲取上底());System.out.println("laderTwo的下底:"+laderTwo.獲取下底());}}4.3static關鍵字classExample4_5954.3static關鍵字2、實例方法和類方法的區別當類的字節碼文件被加載到內存時,類的實例方法不會被分配入口地址,當該類創建對象后,類中的實例方法才分配入口地址,從而實例方法可以被類創建的任何對象調用執行。類中的類方法,在該類被加載到內存時,就分配了相應的入口地址。4.3static關鍵字2、實例方法和類方法的區別964.4this關鍵字1、this關鍵字可以出現在類的實例方法中,代表使用該方法的當前對象。2、this關鍵字出現在類的構造方法中,代表使用該構造方法所創建的對象。實例方法可以操作類的成員變量。格式:this.成員變量4.4this關鍵字1、this關鍵字可以出現在類的實例方974.4this關鍵字如:classA{ intx; voidf() { this.x=100; }}//此例子沒有同名的成員變量和局部變量,this可以省略4.4this關鍵字如:984.4this關鍵字如:classB{ voidf() { this.g(); } voidg() { System.out.println(“OK”); }}//此例子中this代表使用方法f的當前對象,方法發f的方法體中this.g()就是當前對象調用方法g.一個方法調用另一個方法時可以省略方法名字前面的this4.4this關鍵字如:994.5包1、包語句通過關鍵字package聲明包語句。package作為Java源文件的第一條語句。package語句的一般格式:package包名;如:packagesunrise;package;4.5包1、包語句1004.5包如果源程序中省略了package語句,源文件所定義命名的類被隱含地認為是無名包的一部分——即源文件中定義命名的類在同一個包中,但該包沒有名字。4.5包如果源程序中省略了package語句,源文件所定義1014.5包程序如果使用了包語句,就必須有相應的目錄結構。如:packagetom.jafei;則目錄結構必須包含如下結構:……\tom\jiafei4.5包程序如果使用了包語句,就必須有相應的目錄結構。1024.5包例6:packagetom.jiafei;publicclassExample4_6{publicstaticvoidmain(Stringargs[]){System.out.println("我有包名");}}4.5包例6:packagetom.jiafei;1034.5包2、import語句使用import語句可以引入包中的類。在一個java源程序中可以有多個import語句,他們必須寫在package語句和源文件中的類的定義之間4.5包2、import語句1044.5包2、import語句Java提供的包有很多,約130多個如:java.applet 包含所有實現javaapplet的類java.awt 包含抽象窗口工具集中的圖形、文本、窗口GUI類java.awt.image包含抽象窗口工具集中的圖像處理類java.lang 包含所有基本語言類java.io 包含所有的輸入/輸出類 包含所有實現網絡功能的類java.until 包含有用的數據類型類4.5包2、import語句1054.5包引入類:如果要引入一個包中的全部類,則可以用星號來代替如:importjava.awt.*;只引入一個確定的類,則直接寫明引用如:importjava.until.Date4.5包引入類:1064.5包例7:importjava.applet.Applet;importjava.awt.*;publicclassExampleextendsApplet{Buttonredbutton;publicvoidinit(){redbutton=newButton("我是一個紅色的按鈕");redbutton.setBackground(Color.red);add(redbutton);}publicvoidpaint(Graphicsg){g.drawString("itisabutton",30,50);}}4.5包例7:importjava.applet.App107例8importtom.jiafei.*;classExample4_8{publicstaticvoidmain(Stringargs[]){Trangletrangle=newTrangle(12,3,1);trangle.計算面積();trangle.修改三邊(3,4,5);trangle.計算面積();}}例8importtom.jiafei.*;1084.6訪問權限1.私有變量和私有方法2.共有變量和共有方法3.友好變量和友好方法4.受保護成員變量和方法5.public類與友好類4.6訪問權限1.私有變量和私有方法1094.6訪問權限1.私有變量和私有方法 用關鍵字private修飾的成員變量和方法被稱為私有變量和私有方法如:classTom{ privatefloatweight;//weight私有的float變量 privatefloatf(floata,floatb)//方法f是私有方法 {… } ……}4.6訪問權限1.私有變量和私有方法classTom1104.6訪問權限對于私有成員變量或方法,在另外一個類中,不能操作這個私有變量或方法,只有在本類中創建該類的對象的時候,才能訪問自己的私有變量和類中的私有方法。classJerry{ voidg() { Tomcat=newTom(); cat.weight=23f; //非法 cat.f(3f,4f); //非法 }}4.6訪問權限對于私有成員變量或方法,在另外一個類中,不能1114.6訪問權限classExample4_9{privateintmoney;Example4_9(){money=2000;}privateintgetMoney(){returnmoney;}publicstaticvoidmain(Stringargs[]){Example4_9exa=newExample4_9();exa.money=3000;intm=exa.getMoney();System.out.println("money="+m);}}類中訪問自己的私有成員變量和私有方法4.6訪問權限classExample4_9類中訪問自1124.6訪問權限2.共有變量和共有方法 用關鍵字public修飾的成員變量和方法被稱為共有變量和共有方法如:classTom{ publicfloatweight;//weight共有的float變量 publicfloatf(floata,floatb)//方法f是共有方法 {… } ……}4.6訪問權限2.共有變量和共有方法classTom1134.6訪問權限對于共有成員變量或方法,在另外一個類中,能操作這個變量或方法。classJerry{ voidg() { Tomcat=newTom(); cat.weight=23f; //合法 cat.f(3f,4f); //合法 }}4.6訪問權限對于共有成員變量或方法,在另外一個類中,能操1144.6訪問權限3.友好變量和方法 不用private、public、protected修飾的成員變量和方法被稱為友好變量和友好方法。如:classTom{ floatweight;//weight友好的float變量 floatf(floata,floatb)//方法f是友好方法 {… } ……}4.6訪問權限3.友好變量和方法classTom1154.6訪問權限在同一個包中,那么能訪問自己的友好變量和友好方法。classJerry{ voidg() { Tomcat=newTom(); cat.weight=23f; //合法 cat.f(3f,4f); //合法 }}4.6訪問權限在同一個包中,那么能訪問自己的友好變量和友好1164.6訪問權限4.受保護的成員變量和方法 用關鍵字protected修飾的成員變量和方法被稱為受保護的成員變量和受保護的方法如:classTom{ protectedfloatweight;//weight受保護的float變量 protectedfloatf(floata,floatb)//方法f是受保護的方法 {… } ……}4.6訪問權限4.受保護的成員變量和方法classTom1174.6訪問權限當在另外一個類中用類Tom創建一個對象后,如果這個類與類Tom在同一個包中,那么該對象能訪問自己的protected變量和方法.也可以通過類名訪問classJerry{ voidg() { Tomcat=newTom(); cat.weight=23f; //合法 cat.f(3f,4f); //合法 }}4.6訪問權限當在另外一個類中用類Tom創建一個對象后,如1184.6訪問權限5.public類與友好類 類聲明時,如果在關鍵字class前面加上public關鍵字,就稱這樣類是一個public類如:publicclassA{……}如果一個類不加public修飾,則為友好類如:classA {… }4.6訪問權限5.public類與友好類1194.6訪問權限5.public類與友好類 不能用protected和private修飾類訪問權限的排列:public、protected、友好的、private4.6訪問權限5.public類與友好類1204.7類的繼承繼承是一種用已有類創建新類的機制。新類繼承一般類的狀態和行為,并根據需要增加它自己的新的狀態和行為。由繼承而得到的類成為子類,被繼承的類稱為父類(超類)。Java不支持多重繼承(子類只能有一個父類)4.7類的繼承繼承是一種
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 包頭駕考試題及答案
- sql規范考試題及答案
- 2025保安考試題及答案
- 景區商鋪日常管理制度
- 中衛市專項資金管理制度
- 大公司職工住宿管理制度
- 臨時停車場入口管理制度
- 醫院編制周轉池管理制度
- 公司綠化維護與管理制度
- 加工制造業項目管理制度
- 2024深圳職業技術學院教師招聘考試筆試試題
- 美術家眼中的自己自畫像中的自我表現教案
- 個人裝修安全免責的協議書范本
- 化學與人類社會智慧樹知到期末考試答案章節答案2024年內江師范學院
- GJB9001C-2017標準內部宣貫培訓
- 專業市場物業多種經營管理規定
- 2023-2024學年云南省昆明市高一下學期期中考試化學檢測試題(含答案)
- 進口肉類項目商業計劃書(2024-2030)
- JJG 365-2008電化學氧測定儀
- 網球場轉讓協議書
- 輔導員素質能力大賽基礎知識試題題庫
評論
0/150
提交評論