![面向?qū)ο缶幊?最容易理解的解釋_第1頁(yè)](http://file4.renrendoc.com/view/49e2963514924948b0b7bbb1261fa46f/49e2963514924948b0b7bbb1261fa46f1.gif)
![面向?qū)ο缶幊?最容易理解的解釋_第2頁(yè)](http://file4.renrendoc.com/view/49e2963514924948b0b7bbb1261fa46f/49e2963514924948b0b7bbb1261fa46f2.gif)
![面向?qū)ο缶幊?最容易理解的解釋_第3頁(yè)](http://file4.renrendoc.com/view/49e2963514924948b0b7bbb1261fa46f/49e2963514924948b0b7bbb1261fa46f3.gif)
![面向?qū)ο缶幊?最容易理解的解釋_第4頁(yè)](http://file4.renrendoc.com/view/49e2963514924948b0b7bbb1261fa46f/49e2963514924948b0b7bbb1261fa46f4.gif)
![面向?qū)ο缶幊?最容易理解的解釋_第5頁(yè)](http://file4.renrendoc.com/view/49e2963514924948b0b7bbb1261fa46f/49e2963514924948b0b7bbb1261fa46f5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
-.z.技術(shù)是日新月異的,他不會(huì)等待你的成長(zhǎng)。技術(shù)要拿出來(lái)于別人交流,自己學(xué)是自己主觀意識(shí)上的理解,有對(duì)有錯(cuò)!交流會(huì)讓進(jìn)步變得更快。我認(rèn)為如果計(jì)算機(jī)的體系構(gòu)造不發(fā)生革命性的變化,我們現(xiàn)在所應(yīng)用的程序語(yǔ)言也就百變不離奇蹤了!學(xué)編程學(xué)的是什么?思想!精通一門編程語(yǔ)言〔最好是面向?qū)ο蟮恼Z(yǔ)言〕后再去搞其他的編程語(yǔ)言,你會(huì)發(fā)現(xiàn)過(guò)程是如此的行云流水!為什么?你已經(jīng)把編程的思想掌握了,再去學(xué)其他的,無(wú)非是學(xué)習(xí)一種新的語(yǔ)法格式了。我在這里并不是和你討論怎么去用C++或JAVA,也不是和你討論怎么去學(xué)他們,我要和你討論的是怎么去理解面向?qū)ο蟆F渲兄饕獣?huì)涉及到“類、對(duì)象、繼承、屬性、方法、靜態(tài)、重載、隱藏、重構(gòu)、聲明、定義、初始化、賦值等〞其中有許多相關(guān)技術(shù)我只會(huì)一代而過(guò),讓你有一種到此一游的意味我就到達(dá)目的了,而更詳細(xì)的技術(shù)幕,就請(qǐng)參考其他相關(guān)書籍而深入研究吧!因?yàn)槲抑皇窃诤湍闾接懭绾稳ジ玫睦斫饷嫦驅(qū)ο?!如何去提高效率?重?fù)使用資源,把別人的東西拿來(lái)就用。這是很不錯(cuò)的主意!而對(duì)于你來(lái)說(shuō),最大的資源就是信心以及積極性!好,打起精神來(lái),讓我們一同到面向?qū)ο蟮木幊讨腥び脑L勝吧!注:文章中所有程序?qū)嵗叶际褂肑AVA寫的,當(dāng)然在C++中也就小異了了,不同的地方我會(huì)指出!注:文章中的正文文字用黑色,說(shuō)明文字用藍(lán)色,強(qiáng)調(diào)文字用橙色,批改文字用紅色!正文:1.根本概念:1.1類與對(duì)象的初探要我說(shuō),無(wú)論是面向過(guò)程的語(yǔ)言也好,面向?qū)ο蟮恼Z(yǔ)言也罷,我首先要給他講的都是類和對(duì)象!--------“這個(gè)世界是由什么組成的?〞這個(gè)問(wèn)題如果讓不同的人來(lái)答復(fù)會(huì)得到不同的答案。如果是一個(gè)化學(xué)家,他也許會(huì)告訴你“還用問(wèn)嘛?這個(gè)世界是由分子、原子、離子等等的化學(xué)物質(zhì)組成的〞。如果是一個(gè)畫家呢?他也許會(huì)告訴你,“這個(gè)世界是由不同的顏色所組成的〞?!呛?,眾說(shuō)紛紜吧!但如果讓一個(gè)分類學(xué)家來(lái)考慮問(wèn)題就有趣的多了,他會(huì)告訴你“這個(gè)世界是由不同類型的物與事所構(gòu)成的〞好!作為面向?qū)ο蟮某绦騿T來(lái)說(shuō),我們要站在分類學(xué)家的角度去考慮問(wèn)題!是的,這個(gè)世界是由動(dòng)物、植物等組成的。動(dòng)物又分為單細(xì)胞動(dòng)物、多細(xì)胞動(dòng)物、哺乳動(dòng)物等等,哺乳動(dòng)物又分為人、大象、老虎……就這樣的分下去了!現(xiàn)在,站在抽象的角度,我們給“類〞下個(gè)定義吧!我的意思是,站在抽象的角度,你答復(fù)我“什么是人類?〞首先讓我們來(lái)看看人類所具有的一些特征,這個(gè)特征包括屬性〔一些參數(shù),數(shù)值〕以及方法〔一些行為,他能干什么!〕。每個(gè)人都有身高、體重、年齡、血型等等一些屬性。人會(huì)勞動(dòng)、人都會(huì)直立行走、人都會(huì)用自己的頭腦去創(chuàng)造工具等等這些方法!人之所以能區(qū)別于其它類型的動(dòng)物,是因?yàn)槊總€(gè)人都具有人這個(gè)群體的屬性與方法?!叭祟惃曋皇且粋€(gè)抽象的概念,它僅僅是一個(gè)概念,它是不存在的實(shí)體!但是所有具備“人類〞這個(gè)群體的屬性與方法的對(duì)象都叫人!這個(gè)對(duì)象“人〞是實(shí)際存在的實(shí)體!每個(gè)人都是人這個(gè)群體的一個(gè)對(duì)象。老虎為什么不是人?因?yàn)樗痪邆淙诉@個(gè)群體的屬性與方法,老虎不會(huì)直立行走,不會(huì)使用工具等等!所以說(shuō)老虎不是人!由此可見(jiàn)-------類描述了一組有一樣特性〔屬性〕和一樣行為〔方法〕的對(duì)象。在程序中,類實(shí)際上就是數(shù)據(jù)類型!例如:整數(shù),小數(shù)等等。整數(shù)也有一組特性和行為。面向過(guò)程的語(yǔ)言與面相對(duì)象的語(yǔ)言的區(qū)別就在于,面向過(guò)程的語(yǔ)言不允許程序員自己定義數(shù)據(jù)類型,而只能使用程序中置的數(shù)據(jù)類型!而為了模擬真實(shí)世界,為了更好的解決問(wèn)題,往往我們需要?jiǎng)?chuàng)立解決問(wèn)題所必需的數(shù)據(jù)類型!面向?qū)ο缶幊虨槲覀兲峁┝私鉀Q方案。1.2置數(shù)據(jù)類型與函數(shù):計(jì)算機(jī)程序在存儲(chǔ)數(shù)據(jù)時(shí)必須跟蹤3個(gè)根本屬性為:1.信息存儲(chǔ)在何處;2.存儲(chǔ)的值是多少;3.存儲(chǔ)的信息是什么類型的;讓我們來(lái)看看編程語(yǔ)言的置數(shù)據(jù)類型都有哪些!〔呵呵,這個(gè)不大好說(shuō),因?yàn)槊块T語(yǔ)言都有自己獨(dú)特的數(shù)據(jù)類型,但這畢竟是少數(shù),比方在JAVA中有byte類型的數(shù)據(jù),而在C++中就沒(méi)有,希望你能舉一反三!〕比方整數(shù)〞int〞,浮點(diǎn)類型的數(shù)據(jù)〞float〞!字符串〞String〞,以及數(shù)組還有構(gòu)造體等等。然而在寫程序的時(shí)候,根據(jù)需要我們會(huì)創(chuàng)立一個(gè)類型的變量或常量,例如:由于我們需要?jiǎng)?chuàng)立一個(gè)整形的變量i為5,我們就可以這樣做,inti=5;而根據(jù)需要我很有可能改變i的值,也就是從新給它賦值,比方讓它等與6,就可以在所需的地方改成i=6;由此我們知道,在“值〞上可以發(fā)生變化的量就叫變量。不會(huì)發(fā)生變化的量就叫做常量了,在C++中用count關(guān)鍵字來(lái)聲明,而在JAVA中則使用final關(guān)鍵字來(lái)聲明。由于不同語(yǔ)言的聲明格式不一樣,這里就不做一一介紹了,詳細(xì)的容清查閱相關(guān)書籍!在這里我們主要討論一下函數(shù),我們可以把函數(shù)想象成一個(gè)“實(shí)現(xiàn)*種特定功能的黑匣子〞-------這個(gè)功能是由你來(lái)設(shè)定的,舉個(gè)例子來(lái)說(shuō):現(xiàn)在我問(wèn)你“2+3等于多少〞?我相信你能很快的答復(fù)我等于5。讓我們來(lái)分析分析這句話包含什么信息!首先我要把你的大腦想象成是一個(gè)黑匣子,我并不知道也沒(méi)有必要知道你的大腦是如何工作的〔也就是怎么運(yùn)算的〕,我關(guān)心的只是我傳給你的是什么信息?你對(duì)信息做了哪些處理?以及你返回給我的是什么信息?需要提醒你一下的是每個(gè)方法都會(huì)返回一個(gè)信息給調(diào)用者的,除了構(gòu)造函數(shù)外〔稍候我會(huì)作詳細(xì)的介紹〕。我現(xiàn)在需要把自己當(dāng)作是一名程序員,而你呢?當(dāng)然就是計(jì)算機(jī)了!計(jì)算即可沒(méi)有人則聰明,它只會(huì)按事先約好的特定的格式運(yùn)行,我想讓它具有如上所述的功能,我就要先定義這個(gè)黑匣子!首先我要告訴這個(gè)黑匣子會(huì)有兩個(gè)整數(shù)值給你〔這就是所謂的參數(shù),是程序員需要給黑匣子的信息〕,然后就要定義這個(gè)黑匣子部實(shí)現(xiàn)這兩個(gè)整數(shù)相加的運(yùn)算〔這就是黑匣子對(duì)數(shù)據(jù)所做的加工,根據(jù)需要,你可以做任何的加工。〕。最后再標(biāo)注它返回給我一個(gè)同樣是整型的數(shù)值〔這是黑匣子返回給程序員的信息〕。一個(gè)函數(shù)就這樣定義完了,讓我們來(lái)看看書寫格式:intaddnum(int*,inty){
return*+y;
}
具體的含義是這樣的:int/*返回值類型*/addnum/*方法〔黑匣子〕名稱*/(int*,inty/*傳入的參數(shù)*/){
return*+y;/*部是想方法〔實(shí)現(xiàn)相加運(yùn)算,〕并用return返回給調(diào)用者結(jié)果*/
}
首先請(qǐng)注意上明的“return〞語(yǔ)句!return關(guān)鍵字的含義是向調(diào)用者返回緊跟在它后面的信息!就像上面一樣,因?yàn)槲覇?wèn)你,你才會(huì)答復(fù)我,如果我不問(wèn)你,你就不用答復(fù)我的!在計(jì)算機(jī)中也一樣,定義好這個(gè)函數(shù)在哪里調(diào)用呢?我只能告訴你,哪里需要就在哪里調(diào)用!當(dāng)然,你可以根據(jù)需要去更改參數(shù)、返回值以及部實(shí)現(xiàn),具體到如何定義如何調(diào)用你只好去參考相關(guān)的資料了!在這里我只是給你一個(gè)思想!有時(shí)你會(huì)遇到這樣的問(wèn)題,我讓你記住,我的年齡是20歲!從字面上理解,你并沒(méi)有給我返回信息!然而事實(shí)上,你確實(shí)給我返回了信息,信息的容是“無(wú)信息,也就是無(wú)返回值類型void〞。具體的程序如下:intmyAge=0;
inta=20;
voidremAge(inta){
myAge=a;
}
具體的函數(shù)說(shuō)明如下:intmyAge=0;//定義并初始化我的年齡為0;inta=20;/*定義變量a等于20*/
void/*返回值類型為無(wú)返回值類型*/remAge/*函數(shù)名稱*/(inta/*傳入的參數(shù)*/){
myAge=a;//部實(shí)現(xiàn)方法,注意,沒(méi)有return返回?。?!
}
關(guān)于函數(shù)的話題還有很多很多,這里就不一一介紹了,我的目的是讓你知道函數(shù)是怎么一會(huì)事兒!為下面的討論作鋪墊!1.3指針以及引用:指針及引用是在C++中有的,JAVA中沒(méi)有。JAVA中取消了對(duì)存的操作,隨之而來(lái)的事也取消了操作符重載的操作。不過(guò)在稍候我還是會(huì)介紹一些操作符重載的功能等。引用主要還是用在函數(shù)參數(shù)的傳遞上。所以我在這里就不做過(guò)多的介紹了。他們很實(shí)用,有興趣的同學(xué)可以參閱C++相關(guān)書籍。1.4運(yùn)算符及控制語(yǔ)句:還是自己看看相關(guān)書籍吧,這里就不再熬述了!2.深入探討面向?qū)ο螅?.1“類型〞的部細(xì)節(jié):有了上面的知識(shí),我們現(xiàn)在就可以深入的挖掘類的部實(shí)現(xiàn)了。所有的知識(shí)點(diǎn)我都會(huì)圍繞著類與對(duì)象展開(kāi),在此之前,我希望你能夠確信對(duì)以上所介紹的根本容已完全掌握了!是的,面向?qū)ο蟮木幊陶Z(yǔ)言最大的特色就是可以編寫自己所需的數(shù)據(jù)類型,以更好的解決問(wèn)題。我想我必須要幫你搞清楚“類,對(duì)象,屬性,方法它們之間的關(guān)系〞!就像我前面所說(shuō)的,人這個(gè)“類〞是什么也做不了的,因?yàn)椤叭祟惃曋皇且粋€(gè)抽象的概念,它不是實(shí)實(shí)在在的“東西〞,而這個(gè)“東西〞就是所謂的對(duì)象。只有人這個(gè)“對(duì)象〞才能去工作。而類呢?類是對(duì)象的描述!對(duì)象從類中產(chǎn)生出來(lái)!此時(shí),對(duì)象具有類所描述的所有的屬性以及方法。-------一定要理解這句話?。?!也許你已經(jīng)有些不知所措了,沒(méi)關(guān)系!好好的回味一下,我再舉個(gè)例子!例如電視機(jī),電視機(jī)都有工作原理圖,則什么叫電視機(jī)呢?只要它能夠?qū)崿F(xiàn)工作原理圖的所有功能的物體,我們都叫它電視機(jī)。你想想是不是這么一回事兒?可是,電視機(jī)原理圖是不能工作的,也就是這個(gè)原理圖不能收看節(jié)目,只有電視機(jī)這個(gè)“實(shí)體——即所謂的對(duì)象〞才能收看節(jié)目,也就是說(shuō),從類生成出對(duì)象之后才算得上是真正的有意義!才能開(kāi)場(chǎng)工作。此時(shí),電視機(jī)擁有電視原理圖所描述的所有的屬性及方法!明白了吧,呵呵!我先前介紹過(guò),類是屬性與方法的集合。而這些屬性與方法可以被聲明為私有的〔private〕,公共的(public)或是受保護(hù)(protected)的,他們描述了對(duì)類成員的訪問(wèn)控制。下面我分別做一下介紹:1.公共的〔public〕:把變量聲明為公共類型的之后,則就可以通過(guò)對(duì)象來(lái)直接訪問(wèn),一切都是暴露無(wú)遺的!也就是說(shuō),你的信用卡密碼別人也能夠直接得到。2.私有的〔private〕:如果把變量聲明為私有的情況就好多了,想要得到我的信用卡密碼,對(duì)象必須要調(diào)用專用的方法才能夠得到。3.受保護(hù)的〔protected〕:介紹繼承時(shí)再討論。4.默認(rèn)控制訪問(wèn)符〔friendly〕://JAVA中有而C++中沒(méi)有。為了實(shí)現(xiàn)數(shù)據(jù)的封裝,提高數(shù)據(jù)的平安性,我們一般會(huì)把類的屬性聲明為私有的,而把類的方法聲明為公共的。這樣,對(duì)象能夠直接調(diào)用類中定義的所有方法,當(dāng)對(duì)象想要修改或得到自己的屬性的時(shí)候就必須要調(diào)用以定義好的專用的方法才能夠?qū)崿F(xiàn)。你想想,你會(huì)把你的信用卡密碼公布出來(lái)嘛?呵呵!所以,我們提倡的是:“對(duì)象調(diào)方法,方法改屬性〞;2.2通過(guò)實(shí)例看存分配:說(shuō)了這么多,讓我們來(lái)看一個(gè)實(shí)例吧!比方:現(xiàn)在我們要編寫*家公司員工管理系統(tǒng),你認(rèn)為最適宜的數(shù)據(jù)類型是什么?我認(rèn)為是員工個(gè)人!但是在面向過(guò)程的語(yǔ)言中,這樣做是不允許的,因?yàn)樗荒苁褂谜Z(yǔ)言中的部數(shù)據(jù)類型!而員工不在這個(gè)部數(shù)據(jù)類型之!也許有人會(huì)說(shuō)可以用C語(yǔ)言中的struct,好注意!畢竟它是類的根底!如果你以前是一名面C或B的程序員,請(qǐng)你忘掉這些,讓我們一起看看如何用類來(lái)實(shí)現(xiàn)這一切吧!*家公司的員工是人類的一個(gè)特殊群體,它除了具備人類的所有特性與方法外,它還有額外的特性與方法,比方她有她的工資、信用卡密碼、作息時(shí)間等等,這些特性以及工作容,工作量等等這些方法。而在計(jì)算機(jī)中我們?cè)撊绾味x這個(gè)類呢?下面我將寫出它的格式,讓你看看在計(jì)算機(jī)中它是什么樣子的!/*在此我需要再次聲明的是,我用的是JAVA格式,在語(yǔ)法格式上它與C++大不一樣!許多細(xì)節(jié)以及部操作都有諸多區(qū)別,而在思想上確實(shí)小異的*/
//employee.java
publicclassemployee{
privateStringname;//員工privateintage;//員工年齡privatecharse*;//員工性別privatefloatemolument;//員工薪水privatebooleanlunch;//員工午餐//……等等publicvoidheater(){//這個(gè)方法是用來(lái)加工員工的午餐lunch=true;
}
publicvoidsetName(Stringa){//這個(gè)方法是修改員工的name=a;
}
publicStringgetName(){//這個(gè)方法是得到員工的returnname;
}
//……等等
}
這樣我們就定義完了我們所需要的數(shù)據(jù)類型?,F(xiàn)在,讓我們來(lái)看看它能夠干什么以及怎么工作!我想要做的是,工作室里有一個(gè)光桿司令叫“jingwei〞,我修改它的名字后對(duì)對(duì)它進(jìn)展輸出,看看我是怎么做的吧!注意:請(qǐng)仔細(xì)觀察對(duì)象是如何調(diào)用方法的,它使用了“.〞操作符!事實(shí)上是這樣的,對(duì)象調(diào)用公共的屬性或方法時(shí)就會(huì)使用“.〞操作符。然而在C++中,如果定義一個(gè)同類型的指針,該指針調(diào)用此對(duì)象的方法時(shí),就會(huì)使用“->〞操作符。更詳細(xì)的容清參閱相關(guān)書籍了!//workstation.java
importjava.awt.Graphics;
importjava.applet.Applet;
publicclassworkstatione*tendsApplet{
privateemployeejingwei;//對(duì)象的聲明,此時(shí)并不分配存!publicvoidinit(){
jingwei=newemployee();/*此時(shí)創(chuàng)立對(duì)象會(huì)調(diào)用構(gòu)造函數(shù),稍候介紹*/
jingwei.setName(“jw〞);//設(shè)置我的名字
}
publicvoidpaint(Graphicsg){
g.drawString("myageis"+jingwei.getName(),10,10);//顯示我的年齡
}
}
輸出結(jié)果是:mynameisjw
這串字符串是在輸出窗口的*坐標(biāo)軸為10p*,y坐標(biāo)軸為10p*的位置。我現(xiàn)在要做的是,把上面的程序做個(gè)大解剖,讓你能夠看清楚它到底是怎么一回事兒!〔我可不時(shí)帶你去看里面的匯編,呵呵,那個(gè)我也不會(huì):〕首先還是來(lái)看看我們自定義的數(shù)據(jù)類型employee,在應(yīng)用的時(shí)候它和int類型的數(shù)據(jù)沒(méi)什么兩樣,一樣的需要?jiǎng)?chuàng)立變量〔對(duì)象〕,只不過(guò)前者是咱自己定義的,而后這是它置的。Employee這個(gè)類中有許多屬性,也有許多方法。而此時(shí),我們不能直接用我們所創(chuàng)立出來(lái)的對(duì)象調(diào)用它的屬性進(jìn)展修改。因?yàn)樗莗rivate受保護(hù)類型的!我要想修改我的我就要用對(duì)象調(diào)用setName()這個(gè)方法,而我想得到我的就要調(diào)用getName()這個(gè)方法。我們完全是按照航線來(lái)行走的,這個(gè)航線就是“對(duì)象調(diào)方法,方法改屬性〞好的,我真的相信你已經(jīng)明白了這是怎么一回事兒了!呵呵!仰起航帆,繼續(xù)前行!現(xiàn)在讓我們一起來(lái)看看workstation這個(gè)類。這是個(gè)主類,和C++中的main()函數(shù)的味道差不多。其中,在JAVA中,一個(gè)文件只允許有而且必須有一個(gè)主類,這個(gè)主類用public來(lái)聲明!他就跟C++中必須要有一個(gè)main()函數(shù)是一樣的。讓我們來(lái)看看這個(gè)類中的第一條語(yǔ)句!privateemployeejingwei;這條語(yǔ)句的作用是聲明一個(gè)employee的對(duì)象jingwei〔在C++中就不用聲明了〕。我想要和你說(shuō)的是“聲明〞與“定義〞之間的區(qū)別。聲明只是告訴計(jì)算機(jī)將要有這樣的一個(gè)變量〔對(duì)象〕,在存中它并不為這個(gè)變量〔對(duì)象〕分配存!而只有在定義的時(shí)候才會(huì)給這個(gè)變量〔對(duì)象〕分配存?!残枰f(shuō)明一下的是init()方法是完成初始化操作的,在此處定義對(duì)象,為對(duì)象分配存。start()方法用來(lái)啟動(dòng)瀏覽器的主線程,paint()方法來(lái)顯示Apple的界面。這些是Applet程序所需的,至于Application程序就不需要了,當(dāng)然了,C++中也不需要他們。關(guān)于他們的詳細(xì)容清參閱相關(guān)書籍〕緊接著就開(kāi)場(chǎng)定一個(gè)對(duì)象了,對(duì)jingwei這個(gè)對(duì)象進(jìn)展操作才會(huì)有實(shí)際的意義。千萬(wàn)不要有這種想法:“試圖對(duì)類進(jìn)展操作!〞就像前面我說(shuō)的,電視機(jī)原理不能看電視一樣!這是毫無(wú)意義的!看這條語(yǔ)句jingwei=newemployee();它的意思就是定義一個(gè)employee類型的對(duì)象jingwei。此時(shí),我想告訴你的是:“jingwei這個(gè)對(duì)想擁有了些什么〞。它擁有了類所描述的所有的屬性及方法。下面我一一給你列出來(lái):/*所有的employee對(duì)象都擁有這些屬性。每創(chuàng)立一個(gè)對(duì)象就會(huì)從新分配一塊存來(lái)存放相應(yīng)對(duì)象的這些屬性。我的意思是每個(gè)對(duì)象都有自己“獨(dú)特〞的一份*/
privateStringname;//員工privateintage;//員工年齡privatecharse*;//員工性別privatefloatemolument;//員工薪水privatebooleanlunch;//員工午餐/*所有的employee對(duì)象都擁有這些方法。但在存中只有一份*/
publicvoidheater(){//這個(gè)方法是用來(lái)加工員工的午餐lunch=true;
}
publicvoidsetName(Stringa){//這個(gè)方法是修改員工的name=a;
}
publicStringgetName(){//這個(gè)方法是得到員工的returnname;
}
/*但是,實(shí)際上在創(chuàng)立jingwei這個(gè)對(duì)象時(shí)計(jì)算機(jī)只給這個(gè)對(duì)象的所有的屬性分配了存,而并沒(méi)有給方法分配存。方法只有一個(gè),是屬于所有的對(duì)象的,所以無(wú)論創(chuàng)立了多少個(gè)對(duì)象,計(jì)算機(jī)只會(huì)為一個(gè)方法分配一塊存。*/
我想我還是舉個(gè)例子吧,不然你非暈倒不可。呵呵!看我這條語(yǔ)句“privatebooleanlunch;〞公司不管午餐,每個(gè)員工都需要帶飯。我們現(xiàn)在這樣想,公司的空間是所有的存容量,你的辦公桌就是計(jì)算機(jī)中的存中的一局部〔每個(gè)員工都有一份,是在創(chuàng)立對(duì)象時(shí)分配的〕。你把午飯帶到了公司,放在了你的辦公桌上?!拔顼埁曊紦?jù)了你的辦公桌的一角〔占了你自己“對(duì)象〞的一塊存容量〕。這份午飯只屬于你自己,同樣別人的也只屬于她自己!所以每個(gè)員工〔對(duì)象〕都需要一快空間〔存〕來(lái)存放自己的午餐〔屬性〕。在計(jì)算機(jī)中也是這樣的,每創(chuàng)立一個(gè)對(duì)象,就會(huì)在存中從新分配一塊存來(lái)放“午餐——lunch〞這個(gè)屬性〔對(duì)象所擁有的所有的屬性〕。計(jì)算機(jī)只會(huì)為對(duì)象的屬性分配存。因?yàn)槊總€(gè)對(duì)象的都不一樣!就像你往公司帶的午飯和我往公司帶的午飯不一樣是一個(gè)道理!但方法就不同了。早晨帶的飯中午就涼了,你需要用微波爐來(lái)加熱。微波爐可不用你帶,公司就有〔只占公司的一塊空間〕,它放在了午餐桌上。你想想,微波爐屬于誰(shuí)的?它屬于所有員工的!因?yàn)槊總€(gè)員工都可以用它。而不必每個(gè)員工都帶一份。由此可見(jiàn),每個(gè)員工〔對(duì)象〕都有一份午飯〔屬性〕,但所有的員工〔對(duì)象〕只一個(gè)微波爐〔方法〕。所有的員工〔對(duì)象〕都可以通過(guò)這個(gè)微波爐〔方法〕來(lái)改變自己午餐〔屬性〕的冷熱狀態(tài)。殊途同歸!在計(jì)算機(jī)中也就是這樣,方法只有一份,供所有的對(duì)象使用!而屬性是每個(gè)對(duì)象一份,因?yàn)槊總€(gè)對(duì)象的都不一樣。別和我說(shuō)你還不明白,不然我會(huì)撞墻的,呵呵:〕2.3深入探討函數(shù):構(gòu)造函數(shù)、默認(rèn)構(gòu)造函數(shù)、缺省構(gòu)造函數(shù)對(duì)于上面的實(shí)例,它已經(jīng)能完成絕大局部工作了,但它還是不完善的,還有許許多多的細(xì)節(jié)等到我們?nèi)ネ晟?!也許有的同學(xué)已經(jīng)注意到了,當(dāng)我創(chuàng)立完“jingwei〞這個(gè)對(duì)象時(shí),這個(gè)對(duì)象的所有的屬性都是空的,也就是說(shuō):這個(gè)對(duì)象的是未定的、年齡是未定的、性別是未定的、薪水是未定的、午餐也是未定的。而我們想把這些屬性都添加上去,就還要用對(duì)象調(diào)用相應(yīng)的方法,去一個(gè)個(gè)修改!天啊,這簡(jiǎn)直是太麻煩了!有沒(méi)有什么好方法能夠在我們創(chuàng)立對(duì)象的同時(shí)就完成了對(duì)屬性賦值的操作呢?哦不,應(yīng)該說(shuō)是對(duì)屬性的初始化呢?當(dāng)然沒(méi)問(wèn)題了,這就需要所謂的構(gòu)造函數(shù)!構(gòu)造函數(shù)是類中最特殊的函數(shù),它與析構(gòu)函數(shù)的功能正好相反!從特征上來(lái)說(shuō):1.它是編程語(yǔ)言中唯一沒(méi)有返回值類型的函數(shù)。2.它的名稱與類的名稱必須要完全一樣。3.它必須被聲明為公共〔public〕的類型4,可以對(duì)構(gòu)造函數(shù)進(jìn)展重載。5.它在創(chuàng)立對(duì)象是自動(dòng)被調(diào)用。從功能上來(lái)說(shuō):1.它是對(duì)類中的屬性進(jìn)展初始化。其實(shí),對(duì)于上面的程序來(lái)說(shuō)我們沒(méi)有自己定義構(gòu)造函數(shù)。但是,在這種情況下,系統(tǒng)會(huì)自動(dòng)為我們定義一個(gè)“默認(rèn)構(gòu)造函數(shù)〞。他會(huì)把數(shù)值變量自動(dòng)賦值為0,把布爾行變量賦值為false等等〔但在C++中,默認(rèn)構(gòu)造函數(shù)不初始化其成員〕。如果程序員定義了構(gòu)造函數(shù),則系統(tǒng)就不會(huì)再為你的程序添加一個(gè)缺默認(rèn)造函數(shù)了?!苍谶@里,我們提倡的是自己定義構(gòu)造函數(shù),而不是用系統(tǒng)的默認(rèn)構(gòu)造函數(shù)〕還是看個(gè)實(shí)例吧!這樣比擬清楚一些!//employee.java
publicclassemployee{
privateStringname;//員工privateintage;//員工年齡privatecharse*;//員工性別privatefloatemolument;//員工薪水privatebooleanlunch;//員工午餐//……等等publicemployee(){//這個(gè)就是“默認(rèn)〞構(gòu)造函數(shù)name=“jw〞;//設(shè)置員工age=20;//設(shè)置員工年齡se*=“M〞;//設(shè)置員工性別emolument=100;//設(shè)置員工薪水lunch=false;//設(shè)置員工午餐}
publicvoidheater(){//這個(gè)方法是用來(lái)加工員工的午餐lunch=true;
}
//……等等};
這樣,在我們創(chuàng)立“jingwei〞這個(gè)對(duì)象的同時(shí),它的所有的屬性也被初始化了!顯然,這大大的提高了工作效率,但是,它還是不符合要求。想想看,如果我們現(xiàn)在創(chuàng)立這個(gè)類型的第二個(gè)對(duì)象的時(shí)候會(huì)發(fā)生什么事情?告訴你,除了對(duì)象的“名〞〔這個(gè)名稱不在是對(duì)象屬性中的名稱,而是對(duì)象本身的名稱〕不一樣外,其所有的“屬性值〞都一樣!比方:現(xiàn)在我們創(chuàng)立第二個(gè)對(duì)象flashmagic,然而我會(huì)發(fā)現(xiàn)這個(gè)對(duì)象的所有的屬性和jingwei這個(gè)對(duì)象的所有的屬性完全一樣。而我們只能在用對(duì)象的方法去改變著寫屬性了!很顯然,這種方法不大好!我們需要一種方法在創(chuàng)立對(duì)象的時(shí)候?yàn)閷?duì)象的屬性賦予“我們想要的值〞。相信你也看到了,默認(rèn)構(gòu)造函數(shù)就顯得無(wú)能為力了。我們需要的是帶參數(shù)的構(gòu)造函數(shù),在創(chuàng)立對(duì)象時(shí),我們把參數(shù)傳給構(gòu)造函數(shù),這樣就能完成了上述的功能!口說(shuō)無(wú)憑,還是來(lái)看個(gè)實(shí)例吧://employee.java
publicclassemployee{
privateStringname;//員工privateintage;//員工年齡privatecharse*;//員工性別privatefloatemolument;//員工薪水privatebooleanlunch;//員工午餐//……等等publicemployee(Stringn,inta,chars,floate,booleanl){//看這個(gè)構(gòu)造函數(shù)name=n;//設(shè)置員工age=a;//設(shè)置員工年齡se*=s;//設(shè)置員工性別emolument=e;//設(shè)置員工薪水lunch=l;//設(shè)置員工午餐}
publicvoidheater(){//這個(gè)方法是用來(lái)加工員工的午餐lunch=true;
}
//……等等};
這樣一來(lái),在創(chuàng)立對(duì)象的同時(shí)我
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年透明PVC防偽標(biāo)識(shí)項(xiàng)目可行性研究報(bào)告
- 2025年精密數(shù)控壓藥液壓機(jī)項(xiàng)目可行性研究報(bào)告
- 二零二五年度豬肉攤位經(jīng)營(yíng)權(quán)出租合同2篇
- 2025年數(shù)控高速冷擠壓成型機(jī)項(xiàng)目可行性研究報(bào)告
- 2025年學(xué)生收費(fèi)管理系統(tǒng)項(xiàng)目可行性研究報(bào)告
- 2025年促維生素D合成保健燈項(xiàng)目可行性研究報(bào)告
- 2025至2030年防磁防潮柜項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年連褲肚兜項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年玉金方項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年水平流凈化工作臺(tái)項(xiàng)目投資價(jià)值分析報(bào)告
- 綠色能源項(xiàng)目融資計(jì)劃書范文
- 《造血干細(xì)胞移植護(hù)理》課件
- 課題申報(bào)參考:全齡友好視角下的社區(qū)語(yǔ)言景觀評(píng)估及空間優(yōu)化研究
- 中央2025年公安部部分直屬事業(yè)單位招聘84人筆試歷年參考題庫(kù)附帶答案詳解
- 《人工智能發(fā)展史》課件
- 小學(xué)一年級(jí)數(shù)學(xué)20以內(nèi)的口算題(可直接打印A4)
- 成功源于自律 主題班會(huì)課件(共34張ppt)
- 新青島版(五年制)五年級(jí)下冊(cè)小學(xué)數(shù)學(xué)全冊(cè)導(dǎo)學(xué)案(學(xué)前預(yù)習(xí)單)
- (完整word版)重點(diǎn)監(jiān)管的危險(xiǎn)化學(xué)品名錄(完整版)
- 高級(jí)工程師電子版職稱證書在網(wǎng)上打印步驟
- 品牌形象的12個(gè)原型
評(píng)論
0/150
提交評(píng)論