




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第5章類和對象
任務一:掌握類和對象基本知識
任務三:實訓五類和對象的使用
任務二:掌握類的封裝
5.1任務一掌握類和對象基本知識
5.1.1面向對象基本概念面向對象(Object-oriented)就是一種常見的程序結構設計的方法面,面向對象(OO)方法是一種程序設計方法,其基本思想是使用抽象、對象、類、繼承、消息、多態等基本概念進行程序設計。
1.抽象:科學研究中經常使用的一種方法,即是從現實世界的眾多的事物中抽出事物的本質特性而暫時不考慮它們的細節,得到眾多事物的一個清晰的基本框架的手段而已。2.對象
對象沒有一個明確的定義。我們可以將對象看作是現實生活當中頭能夠被識別、被理解,具有明確的行為、思想、感覺的人或事物。對象具有一些特征:對象是現實的抽象的事物,對計算機所能完成的任務的描述起到重要作用。對象應具有某些屬性,即數據,同時也表現出特定的行為。可以通過對屬性和行為的定義,將相似的對象劃分為同一類。通過這個類還可以派生出更多的具體的對象。對象之間還可以進行相互作用或相互操作,也就是說,一個對象可以通過執行某些指令來操作另外一個對象的數據。在和對象交互的過程中,對象內部的運作方式對用戶是不可見的。這就保證了對象的安全性。對象可以被其他系統包含和復用。3.類
類是現實世界某些對象的共同特征(屬性和操作)的表示,是對象的藍圖或模型,通過類可以創建多個對象。4.封裝
封裝是把數據和方法放到一個類中的過程,即將信息隱蔽的過程。是什么促使我們將信息隱蔽呢?原因有兩點:一、防止程序員接觸他們不該接觸的東西——通常是內部數據類型的設計思想。若只是為了解決特定的問題,用戶只需操作接口即可,毋需明白這些信息。二、只允許庫設計人員修改內部結構,不用擔心它會對客戶程序員造成什么影響。5.1.2類的聲明類的聲明類聲明定義一個類的名稱、訪問權限、與其他類的關系等。聲明類的格式為:
[類修飾符]class類名[extends父類名][implements接口名表]{
類體
}
說明:class聲明類的關鍵字。
extends指明本類繼承的父類,在其后指定父類名
implements指明本類使用的接口,在其后指定接口名表類修飾符用于指定類的使用特性和訪問權限,例如類是否為抽象類或最終類等。可取以下三種之一:
public表明本類是共有類,在本包與其他包內均可訪問。
abstract表明本類為抽象類,必須被繼承后才能使用。
final表明本類為最終類,不能被其他類繼承。類聲明緊接一對大括號,在大括號中是類體。【例5-1】程序題目publicclassPeople{publicStringname;
publiccharsex;
publicintage;
publicStringIdcard;
publicPeople(){}
publicPeple(Stringname,intage,StringIdcard){=name;
this.age=age;
this.Idcard=Idcard;}publicStringgetIdcard(){returnthis.Idcard;
}publicStringsetIdcard(StringIdcard){this.Idcard=Idcard;
}}下面是一些使用不同修飾符組合進行類定義的例子。(1)空類
classempty{}(2)最簡單的類
classPeople{類體;}(3)公有類publicclassPeople{類體;}(4)最終類publicfinalclassPeople{類體;}(5)抽象類publicabstractclassPeople{類體;}(6)繼承了父類People的子類publicclassEmployeeextendsPeople{類體;}(7)繼承了父類且實現了一個接口的類publicclassEmployeeextendsPeopleimplementsComparable{類體;}5.1.3方法的聲明完整的成員方法聲明語法格式:[修飾符]方法返回值類型方法名([形參數列表])[throws異常類]{
語句序列;
[return[返回值]];}例如,下面的程序是求最小值的方法聲明。publicintmin(inta,intb){intc;
c=(a>b)?a:b;
returnc;}說明:(1)方法的修飾符是用于指定本方法的訪問權限和特性,例如,方法是否為公有方法或類方法等。方法的修飾符有以下幾種:①public|private|protected|default:該修飾符被稱為訪問控制修飾符,其規定了成員方法的可見范圍。例如,public訪問修飾符表示該方法可以被任何其他代碼調用,而private表示方法只能被類中的其他方法調用。②static該修飾符聲明了本方法是類方法。③final該修飾符聲明了本方法為不可被子類所重寫的最終方法。不可與abstract修飾符同時使用。④abstract該修飾符聲明了本方法為抽象類中的抽象方法,必須在非抽象的子類中實現具體操作。不可與final修飾符同時使用。(2)方法的返回值類型可以是基本數值型,也可以是任一引用類型,當沒有返回值時,其類型默認為void。(3)形參數列表用于接收方法調用時外界傳來的參數,也可以沒有參數,但注意的是小括號是不能省略的。每個參數都必須要有自己獨立的類型聲明,即使相鄰的兩個參數的類型是相同的也不能公用類型聲明,參數之間要用逗號隔開。(4)throws異常類:其中出現多個異常類時要用逗號隔開。5.1.4方法調用及參數傳遞1.方法調用方法根據其是否帶有static修飾符可以分為類方法和對象方法(實例方法)。(1)對象方法調用的格式:對象名.方法名(實參列表);(2)類方法調用的格式:類名.方法名(實參列表);沒有返回值的方法調用,通常調用的方式比較簡單,一般直接構成方法調用語句。例如:System.out.println(“Iamaboy!”);例如:intmin=0;…min=Math.min(3,4);2.參數傳遞(1)形參和實參【例5-2】程序題目publicclassTest{publicintmin(inta,intb){intc;
c=(a>b)?a:b;
returnc;}publicstaticvoidmain(String[]args){intmin=0,x=10,y=20;
Testt=newTest();
min=t.min(x,y);
System.out.println(“minis”+min);
}}(2)值傳遞【例5-3】程序題目//簡單類型是用值傳遞classTest{voidmethod(inti,intj){i=i+10;j=j-10;
}}publicclassCallByValue{publicstaticvoidmain(Stringargs[]){Testobject=newTest();
inta=25,b=30;
System.out.println("調用前a和b的值:"+a+""+b);
object.method(a,b);
System.out.println("調用后a和b的值:"+a+""+b);
}}(3)引用傳遞【例5-4】程序題目//當參數為數組時,傳遞的方式為引用傳遞publicclassT2{publicstaticvoidmain(String[]args){int[]a={1,2,3};method2(a);System.out.println(a[0]);System.out.println(a[1]);System.out.println(a[2]);}staticvoidmethod2(int[]a){a[0]=0;a[1]=7;a[2]=8;}}【例5-5】程序題目//當參數為對象時,傳遞的方式為引用傳遞classTest{inta,b;
Test(inti,intj){a=i;b=j;}//傳遞一個對象
voidmethod(Testob){ob.a=ob.a+10;ob.b=ob.b-10;}}
publicclassCallByReference{publicstaticvoidmain(Stringargs[]){Testobject=newTest(25,30);
System.out.println("調用前object.a和object.b的值:"+object.a+""+object.b);
object.method(object);
System.out.println("調用后object.a和object.b的值:"+object.a+""+object.b);
}}5.1.5對象的創建和使用1.對象聲明類對象2.對象的創建(1)先聲明對象,再創建對象格式一:類名對象變量;——新對象的聲明對象變量=new類名([參數列表]);——新對象內存空間的分配(2)聲明對象的同時創建對象格式二:類名對象變量=new類名([參數列表]);3.引用對象的成員變量和調用對象方法對象.成員變量對象.成員方法([參數列表])aday.year=2006;//引用對象的成員變量aday.setDate(2006,1,28);//調用對象的方法"abcd".equals("abc")
例如:Peopleperson1=newPeople();Peopleperson2=person1;=“王明”;4.this引用
this用來訪問本類的成員變量和成員方法的引用格式如下:(1)this.成員變量(2)this.成員方法([參數列表])一般情況下,在以下幾種情況下需要使用到this:第一,通過this調用另一個構造方法,用法是this(參數列表),這個僅僅在類的構造方法中,別的地方不能這么用。第二,函數參數或是函數中的局部變量和成員變量同名的情況下,成員變量被屏蔽,此時要訪問成員變量則需要用“this.成員變量名”的方式來引用成員變量。
第三,在函數中,需要引用該函所屬類的當前對象時候,直接用this。5.super引用
super用來訪問父類的成員變量和成員方法的引用格式有以下幾種:(1)super.成員變量(2)super.(參數列表)
(3)super.成員方法([參數列表])針對super的引用方式,下面總結一下super的用法:第一,在子類構造方法中要調用父類的構造方法,用“super(參數列表)”的方式調用,參數不是必須的。同時還要注意的一點是:“super(參數列表)”這條語句只能用在子類構造方法體中的第一行。第二,當子類方法中的局部變量或者子類的成員變量與父類成員變量同名時,也就是子類局部變量覆蓋父類成員變量時,用“super.成員變量名”來引用父類成員變量。當然,如果父類的成員變量沒有被覆蓋,也可以用“super.成員變量名”來引用父類成員變量,不過這是不必要的。第三,當子類的成員方法覆蓋了父類的成員方法時,也就是子類和父類有完全相同的方法定義(但方法體可以不同),此時,用“super.方法名(參數列表)”的方式訪問父類的方法。【例5-6】程序題目classPerson{
publicintnumber;
privateStringname;
privateintage;protectedvoidsetName(Stringname){
=name;
}
protectedvoidsetAge(intage){
this.age=age;
}protectedvoidprint(){System.out.println("姓名:"+name+",年齡:"+age);}}publicclassDemoSuperextendsPerson{
publicvoidprint(){System.out.println("DemoSuper:");super.print();}publicstaticvoidmain(String[]args){DemoSupertest=newDemoSuper();test.setName("張三");test.setAge(20);test.print();}}【例5-7】程序題目classPerson{
publicstaticvoidprint(Strings){System.out.println(s);}Person(){print("APerson.");}Person(Stringname){print("Apersonnameis:"+name);}}publicclassChineseextendsPerson{Chinese(){super();
//調用父類構造函數(1)print("Achinese.");//(4)}Chinese(Stringname){super(name);//調用父類具有相同形參的構造函數(2)print("hisnameis:"+name);}Chinese(Stringname,intage){this(name);//調用當前具有相同形參的構造函數(3)print("hisageis:"+age);}publicstaticvoidmain(String[]args){Chinesepeople=newChinese();people=newChinese("張三");people=newChinese("張三",20);}}5.1.6構造方法及特點
1.構造函數
(1)構造函數1:
publicInteger(intvalue){this.value=value;
}(2)構造函數2publicInteger(Stringa)throwsNumberFormatException{this.value=parseInt(s,10);
}2.構造函數的特點構造方法的使用局限在下述兩個地方:(1)創建對象。(2)在構造方法的方法體的第一條語句,可以調用同類中的另一各構造方法或者是父類的構造方法。【例5-8】程序題目
//下面的People類中包含兩個構造函數。publicclassPeople{publicStringname;
publiccharsex;
publicintage;
publicStringIdcard;
//第一種構造函數,一個不帶任何參數和語句的構造函數
publicPeople(){}//第二種構造函數,帶有參數的構造函數
publicPeople(Stringname,intage,StringIdcard){=name;
this.age=age;
this.Idcard=Idcard;}}【例5-9】程序題目publicclassPeople{publicStringname;
publiccharsex;
publicintage;
publicStringIdcard;
publicStringgetIdcard(){returnthis.Idcard;
}publicStringsetIdcard(StringIdcard){this.Idcard=Idcard;
}}【例5-10】程序題目publicclassPeople{publicStringname;
publiccharsex;
publicintage;
publicStringIdcard;
publicPeple(Stringname,intage,StringIdcard){=name;
this.age=age;
this.Idcard=Idcard;}publicStringgetIdcard(){returnthis.Idcard;
}publicStringsetIdcard(StringIdcard){this.Idcard=Idcard;
}}【例5-11】程序題目
//例題5-10修改如下publicclassPeople{publicStringname;
publiccharsex;
publicintage;
publicStringIdcard;
publicPeople(){}publicPeople(Stringname,intage,StringIdcard){=name;
this.age=age;
this.Idcard=Idcard;}publicStringgetIdcard(){returnthis.Idcard;
}publicStringsetIdcard(StringIdcard){this.Idcard=Idcard;
}}5.1.7對象的初始化初始化的四個要點,如下:1.如果有static,即靜態成員定義,首先初始化static的變量。2.static只初始化一次,在第二次創建類的對象的時候,就不會去執行static的語句。3.變量的初始化在方法前。4.在含有main的類中執行順序是先做static,然后就是main,而不是像其它類一樣,除了static就按順序做下來。5.2任務二掌握類的封裝
5.2.1訪問權限訪問控制符的修飾范圍名稱修飾符本類子類包所有類公共public可見可見可見可見私有private可見受保護protected可見可見可見友好――可見可見注意:(1)默認修飾符為friend類,但在Java語言中,friend不是關鍵字。所以在默認情況下,成員的訪問范圍只在本類和本包當中,其子類和其它類是不能訪問的。(2)修飾符protected僅僅用于繼承情況下。(3)當一個類成員的修飾符為public時,說明該成員可以被程序中任何其它代碼訪問。(4)當一個類成員的修飾符為private時,則該成員只能它自身類的其它成員訪問。訪問控制符要放在成員類型的其他說明之前,也就是說,成員的聲明語句必須以訪問控制符開頭。【例5-12】程序題目classTest1{inta;publicintb;privateintc;voidsetc(inti){c=i;}
intgetc(){returnc;}}classTest2{publicstaticvoidmain(Stringargs[]){Test1object=newTest1();object.a=10;object.b=20;//object.c=100;//Error!object.setc(100);System.out.println("a,b,andc:"+object.a+""+object.b+""+object.getc());}}5.2.2類變量和實例變量
1.類變量類變量也稱為靜態變量,由static修飾,如:staticintage;age就是類變量,它只能通過類來訪問。類變量的訪問格式不同于一般的實例變量。類變量的訪問格式:類名.變量名【例5-13】程序題目//下面的例子說明了類變量b在它的類之外如何被訪問。classDemo{staticinta=42;staticintb=99;voidcallme(){System.out.println("a="+a);}}publicclassStaticByName{publicstaticvoidmain(Stringargs[]){Demoob=newDemo();ob.callme();System.out.println("b="+Demo.b);}}2.實例變量【例5-14】程序題目publicclassPeople{publicStringname;
publiccharsex;
publicintage;
publicStringIdcard;
//空構造方法
publicPeople(){}
//帶三個參數的構造方法
publicPeople(Stringname,intage,StringIdcard){=name;
this.age=age;
this.Idcard=Idcard;}publicstaticvoidmain(){Peoplep1=newPeople();Peoplep2=newPeople();}}3.類變量和實例變量的區別(1)實例變量沒有static修飾符,它只能通過實例對象來訪問,而類變量則直接通過類名來訪問。(2)同一類的不同的實例對象有自己的實例變量,但是它們共享同一個類變量。當一個實例對象修改了它的實例變量時,不會影響其他的實例對象。但當一個實例對象修改了類變量時,則會影響其他的對象實例。而類變量則是一變全變。(3)類變量要在使用前進行初始化,實例變量則不需要。5.2.3類成員方法和函數數學方法1.類成員方法
類方法的調用格式:類名.方法名(實參列表)【例5-15】程序題目publicclassExample{publicstaticvoiddisplay(){System.out.println("類的方法");}publicvoiddisplayOne(){System.out.println("對象的方法");}publicstaticvoidmain(String[]args){Example.display();Examplee=newExample();e.displayOne();}}類方法體有以下限制,一旦違反將導致編譯錯誤:(1)類方法中不能引用對象變量(2)類方法中不不調用類的對象方法(3)在類方法中不能使用super、this關鍵字。2.函數數學方法
sin(arg)cos(arg)tan(arg)asin(arg)acos(arg)atan(arg)atan2(arg1,arg2)正弦余弦正切余切反余弦反正切2個參數的反正切abs(arg)計算參數的絕對值max(arg1,arg2)返回較大一個ceil(arg)返回大于等于該參數的最小整數floor(arg)返回小于等于該參數的最大整數round(arg)計算于參數值最接近的整數(參數floor或double)rint(arg)計算于參數值最接近的整數(參數double)min(arg1,arg2)返回小的一個IEEEremainder(art1,arg
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫學基礎知識的考核形式多樣性試題及答案
- 激光在電子制造中的應用試題及答案
- 腹穿考試試題及答案
- 動畫創作面試題及答案
- 意外脫管護理試題及答案
- 激光行業人才培養試題及答案
- 安慶客服面試題及答案
- 知識產權保護的市場導向的試題及答案
- 衛生管理職業道德知識試題及答案
- 激光新應用領域試題及答案分享
- 2025工程監理聘用合同范例
- 自媒體運營創業計劃書
- 2025年鄭州電力職業技術學院單招綜合素質考試題庫及答案1套
- 過賬合同協議范文
- 門牌安裝施工方案
- 2025年起重機指揮Q1特種作業考試復習(重點)題庫(濃縮300題)
- 職業能力測驗考試試卷含答案
- 基于區塊鏈的數據共享與存儲機制-全面剖析
- 2025年上半年山東青島西海岸新區“優才”專業化干部選聘40人重點基礎提升(共500題)附帶答案詳解
- GB/T 45355-2025無壓埋地排污、排水用聚乙烯(PE)管道系統
- 2024年廣東省五年一貫制學校招生考試數學試卷
評論
0/150
提交評論