Java語(yǔ)言程序設(shè)計(jì)基礎(chǔ)第四章:面向?qū)ο蟪绦蛟O(shè)計(jì)一-類(lèi)和對(duì)象 封裝_第1頁(yè)
Java語(yǔ)言程序設(shè)計(jì)基礎(chǔ)第四章:面向?qū)ο蟪绦蛟O(shè)計(jì)一-類(lèi)和對(duì)象 封裝_第2頁(yè)
Java語(yǔ)言程序設(shè)計(jì)基礎(chǔ)第四章:面向?qū)ο蟪绦蛟O(shè)計(jì)一-類(lèi)和對(duì)象 封裝_第3頁(yè)
Java語(yǔ)言程序設(shè)計(jì)基礎(chǔ)第四章:面向?qū)ο蟪绦蛟O(shè)計(jì)一-類(lèi)和對(duì)象 封裝_第4頁(yè)
Java語(yǔ)言程序設(shè)計(jì)基礎(chǔ)第四章:面向?qū)ο蟪绦蛟O(shè)計(jì)一-類(lèi)和對(duì)象 封裝_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Java面向?qū)ο蟪绦蛟O(shè)計(jì)一

----類(lèi)和對(duì)象封裝第四章預(yù)習(xí)檢查類(lèi)和對(duì)象的關(guān)系方法如何定義封裝的概念掌握面向?qū)ο蟮乃枷胝祁?lèi)和對(duì)象的使用方法的定義和使用方法的重載構(gòu)造函數(shù)封裝組合類(lèi)和嵌套類(lèi)本章目標(biāo)面向?qū)ο蠛兔嫦蜻^(guò)程面向?qū)ο笫窍鄬?duì)于面向過(guò)程而言的面向過(guò)程本質(zhì)上是面向機(jī)器,而不是面向問(wèn)題,和實(shí)際生活相偏離面向?qū)ο蟮姆先藗兯季S的一種方式,能夠比較好的將現(xiàn)實(shí)生活和程序相結(jié)合,便于思考和實(shí)現(xiàn)面向?qū)ο螅∣O)的優(yōu)點(diǎn)與人類(lèi)的思維習(xí)慣一致把人類(lèi)解決問(wèn)題的思維過(guò)程轉(zhuǎn)變?yōu)槌绦蚰軌蚶斫獾倪^(guò)程信息隱藏,提高了程序的可維護(hù)性和安全性封裝實(shí)現(xiàn)了模塊化和信息隱藏封裝使得在對(duì)象外部不能隨意訪問(wèn)對(duì)象的屬性和方法提高了程序的可重用性一個(gè)類(lèi)可以創(chuàng)建多個(gè)對(duì)象實(shí)例,增加了重用性對(duì)象人們把生活中的每個(gè)物體都看成是一個(gè)對(duì)象,也就是實(shí)實(shí)在在存在的,看得見(jiàn)摸得著,由一組屬性和方法構(gòu)成屬性——對(duì)象具有的各種特征每個(gè)對(duì)象的每個(gè)屬性都擁有特定值方法——對(duì)象執(zhí)行的操作每個(gè)對(duì)象的操作也不一定相同封裝對(duì)象同時(shí)具有屬性和方法兩項(xiàng)特性對(duì)象的屬性和方法通常被封裝在一起,共同體現(xiàn)事物的特性,二者相輔相承,不能分割誰(shuí)看見(jiàn)過(guò)只有“完好的零件和顏色”而不能開(kāi)動(dòng)的汽車(chē)?類(lèi)顧客類(lèi)轎車(chē)類(lèi)

…………類(lèi)是模子,確定對(duì)象將會(huì)擁有的特征(屬性)和行為(方法)類(lèi)具有相同屬性和方法的一組對(duì)象的集合類(lèi)是對(duì)象的類(lèi)型不同于int類(lèi)型:具有方法各種口味的球狀冰淇淋類(lèi)和對(duì)象的關(guān)系類(lèi)是抽象的概念,僅僅是模板,比如說(shuō):“人”對(duì)象是一個(gè)你能夠看得到、摸得著的具體實(shí)體小布什普京克林頓……“人”類(lèi)特征(屬性)年齡體重行為(方法)衣食住行Java是面向?qū)ο蟮恼Z(yǔ)言

所有Java程序都以類(lèi)class為組織單元關(guān)鍵字class定義自定義的數(shù)據(jù)類(lèi)型

public

classHelloWorld{

publicstaticvoidmain(String[]args){ System.out.println("HelloWorld!!!"); }}Java類(lèi)模板類(lèi)將現(xiàn)實(shí)世界中的概念模擬到計(jì)算機(jī)程序中publicclass

類(lèi)名{

//定義屬性部分屬性1的類(lèi)型屬性1;

屬性2的類(lèi)型屬性2;…

屬性n的類(lèi)型屬性n;

//定義方法部分方法1;

方法2;…

方法m;}如何定義類(lèi)定義一個(gè)類(lèi)的步驟1、定義類(lèi)名----命名規(guī)則2、編寫(xiě)類(lèi)的屬性----就是成員變量3、編寫(xiě)類(lèi)的方法----馬上講解如何創(chuàng)建和使用對(duì)象使用對(duì)象的步驟:創(chuàng)建對(duì)象類(lèi)名對(duì)象名=new類(lèi)名();引用對(duì)象成員:使用“.”進(jìn)行以下操作引用類(lèi)的屬性:對(duì)象名.屬性引用類(lèi)的方法:對(duì)象名.方法名()Schoolcenter=newSchool();="北京中心";//給name屬性賦值center.showCenter(); //調(diào)用showCenter()方法如何定義類(lèi)的方法類(lèi)的方法定義類(lèi)的某種行為(或功能)方法的定義方法的名稱(chēng)方法的主體方法返回的數(shù)據(jù)類(lèi)型定義類(lèi)的方法public返回值類(lèi)型方法名(){//這里編寫(xiě)方法的主體}步驟一:定義方法名以及返回值步驟二:編寫(xiě)方法體方法的返回值兩種情況如果方法具有返回值,方法中必須使用關(guān)鍵字return返回該值,返回類(lèi)型為該返回值的類(lèi)型如果方法沒(méi)有返回值,返回類(lèi)型為voidpublicclassStudent{Stringname="張三";publicvoidgetName(){

returnname;}……}返回類(lèi)型要匹配return表達(dá)式;編譯錯(cuò)誤作用:跳出方法給出結(jié)果方法調(diào)用方法是個(gè)“黑匣子”,完成某個(gè)特定的應(yīng)用程序功能,并返回結(jié)果方法調(diào)用:執(zhí)行方法中包含的語(yǔ)句

對(duì)象名.方法名();方法調(diào)用小結(jié)方法之間允許相互調(diào)用,不需要知道方法的具體實(shí)現(xiàn),提高了效率

情況

舉例Student類(lèi)的方法a()調(diào)用Student類(lèi)的方法b(),直接調(diào)用publicvoida(){b();//調(diào)用b()}Student類(lèi)的方法a()調(diào)用Teacher類(lèi)的方法b(),先創(chuàng)建類(lèi)對(duì)象,然后使用“.”調(diào)用publicvoida(){Teachert=newTeacher();t.b();//調(diào)用Teacher類(lèi)的b()}為什么要用帶參數(shù)的方法工作原理新鮮桃汁新鮮蘋(píng)果汁新鮮梨汁輸出三種果汁如何使用帶參數(shù)的方法3-1定義帶參數(shù)的方法調(diào)用帶參數(shù)的方法publicclassZhazhi{

publicStringzhazhi(Stringfruit){Stringjuice=fruit+"汁";returnjuice;}}/*調(diào)用zhazhi方法*/ZhazhimyZhazhi=newZhazhi();StringmyFruit="蘋(píng)果";StringmyJuice=myZhazhi.zhazhi(myFruit);System.out.println(myJuice);參數(shù)列表:(數(shù)據(jù)類(lèi)型參數(shù)1,數(shù)據(jù)類(lèi)型參數(shù)2…)調(diào)用方法,傳遞的參數(shù)要與參數(shù)列表一一對(duì)應(yīng)如何使用帶參數(shù)的方法3-2<訪問(wèn)修飾符>返回類(lèi)型<方法名>(<形式參數(shù)列表>){ //方法的主體}該方法允許被訪問(wèn)調(diào)用的權(quán)限范圍方法返回值的類(lèi)型publicclassStudentsBiz{ String[]names=newString[30];

publicvoidaddName(Stringname){

//增加學(xué)生姓名

} publicvoidshowNames(){

//顯示全部學(xué)生姓名

}}傳送給方法的形參列表一個(gè)形式參數(shù)沒(méi)有返回值如何使用帶參數(shù)的方法3-3publicstaticvoidmain(String[]args){

StudentsBizst=newStudentsBiz();Scannerinput=newScanner(System.in);for(inti=0;i<5;i++){System.out.print("請(qǐng)輸入學(xué)生姓名:");StringnewName=input.next();

st.addName(newName);}st.showNames();

}實(shí)參的類(lèi)型、數(shù)量、順序都要與形參一一對(duì)應(yīng)先實(shí)例化對(duì)象,再使用方法調(diào)用帶參數(shù)的方法對(duì)象名.方法名(實(shí)參1,實(shí)參2,……,實(shí)參n)實(shí)參列表理解方法重載生活中的方法重載表演類(lèi)歌曲樂(lè)器劇本方法參數(shù)方法體publicclassPlayer{

publicvoidPlay(劇本){//根據(jù)劇本表演}publicvoidPlay(歌曲){//演唱歌曲}

publicvoidPlay(鋼琴){//彈奏鋼琴}}方法重載:同一個(gè)類(lèi)中,方法名相同,參數(shù)項(xiàng)不同(參數(shù)類(lèi)型不同、參數(shù)個(gè)數(shù)不同)方法重載方法重載,指同一個(gè)類(lèi)中多個(gè)方法:方法名相同參數(shù)列表不同與返回值、訪問(wèn)修飾符無(wú)關(guān)

publicStudent(){//代碼

}publicStudent(Stringname,intage){//代碼}System.out.println(45);System.out.println(true);System.out.println("狗在玩耍!");構(gòu)造方法5-1對(duì)象初始化Studentstu=newStudent();=name;//賦初值stu.age=age;publicclassStudent{//屬性

//無(wú)參構(gòu)造方法

publicStudent(){

name="小明";

age=23;

}}使用構(gòu)造方法:Studentstu=new

Student();能否在創(chuàng)建對(duì)象的同時(shí)就完成賦值?構(gòu)造方法構(gòu)造方法5-2構(gòu)造方法是類(lèi)中一種特殊的方法,完成對(duì)象的初始化,通過(guò)new關(guān)鍵字調(diào)用構(gòu)造方法名與類(lèi)名相同,不返回任何值public

構(gòu)造方法名(){//初始化代碼}與類(lèi)名相同沒(méi)有返回值類(lèi)型publicclassStudent{

publicStudent(){

name="小明";

age=23;

}}可以指定參數(shù)在構(gòu)造函數(shù)中,給屬性設(shè)置默認(rèn)值不同對(duì)象實(shí)例化后,仍需設(shè)置不同屬性值;能否實(shí)例化時(shí)一次性設(shè)置對(duì)象真正屬性值?編寫(xiě)帶參構(gòu)造函數(shù)5-3帶參數(shù)的構(gòu)造函數(shù)publicclassStudent{

//有參構(gòu)造方法 publicStudent(Stringname,intage){ =name; this.age=age; }}將參數(shù)的值,分別賦給當(dāng)前實(shí)例的屬性this的用法5-4this關(guān)鍵字指代當(dāng)前類(lèi)調(diào)用屬性調(diào)用方法調(diào)用構(gòu)造方法this.health=100;

this.name="大黃";this.print();

this();如果使用,必須是構(gòu)造方法中的第一條語(yǔ)句this("小黑",100,100,"雄");構(gòu)造方法5-5閱讀代碼,說(shuō)出運(yùn)行結(jié)果,并指出原因classPenguin{publicvoidPenguin(){ health=10;sex="雄";System.out.println("執(zhí)行構(gòu)造方法");}publicvoidprint(){System.out.println("企鵝的名字是"+name+",健康值是"+health+",性別是"+sex);}}Penguinpgn3=newPenguin();pgn3.print();有返回值類(lèi)型,不是構(gòu)造方法類(lèi)的隱式構(gòu)造方法構(gòu)造兩個(gè)對(duì)象//實(shí)例化一個(gè)學(xué)生員對(duì)象Studentstu=newStudent(name,age);

//實(shí)例化另一個(gè)程序員對(duì)象Studentstu1=newStudent();…..punlicStudent{

//省略字段、屬性publicStudent(stringname,intage){//…省略}

}編譯錯(cuò)誤:不包含采用“0”參數(shù)的構(gòu)造方法

演示示例:隱式構(gòu)造函數(shù)每個(gè)類(lèi)都默認(rèn)有一個(gè)無(wú)參數(shù)的構(gòu)造方法,一旦手動(dòng)添加了構(gòu)造方法,系統(tǒng)就不會(huì)再給類(lèi)添加無(wú)參構(gòu)造方法為什么要使用封裝下面代碼有什么問(wèn)題?如何解決上面設(shè)計(jì)的缺陷?Dogd=newDog();d.health=1000;不合理的賦值

使用封裝

什么是封裝面向?qū)ο笕筇卣髦弧庋b封裝的概念封裝的好處封裝:將類(lèi)的某些信息隱藏在類(lèi)內(nèi)部,不允許外部程序直接訪問(wèn),而是通過(guò)該類(lèi)提供的方法來(lái)實(shí)現(xiàn)對(duì)隱藏信息的操作和訪問(wèn)

隱藏類(lèi)的實(shí)現(xiàn)細(xì)節(jié)只能通過(guò)規(guī)定方法訪問(wèn)數(shù)據(jù)方便加入控制語(yǔ)句方便修改實(shí)現(xiàn)如何使用封裝封裝的步驟修改屬性的可見(jiàn)性創(chuàng)建getter/setter方法在getter/setter方法中加入屬性控制語(yǔ)句設(shè)為private用于屬性的讀寫(xiě)對(duì)屬性值的合法性進(jìn)行判斷classDog{

privateStringname="旺財(cái)";//昵稱(chēng)

privateinthealth=100;//健康值

privateintlove=0;//親密度

privateStringstrain="拉布拉多犬";//品種

publicintgetHealth(){returnhealth;}

publicvoidsetHealth

(inthealth){if(health>100||health<

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論