版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、面向?qū)ο笏枷?不看后悔 ! 前言: 整理這份資料的目的是為了幫助朋友們能夠更直觀的理解面向?qū)ο蟮木幊?。讓后來者能?少走一些彎路。但其中不免有許多漏洞及錯(cuò)誤,也還請前輩提出寶貴的更改意見,畢竟交流 會(huì)讓我們不斷的進(jìn)步。 技術(shù)是日新月異的,他不會(huì)等待你的成長。技術(shù)要拿出來于別人交流,自己學(xué)是自己主觀 意識(shí)上的理解, 有對有錯(cuò)! 交流會(huì)讓進(jìn)步變得更快。 我認(rèn)為如果計(jì)算機(jī) 的體系結(jié)構(gòu)不發(fā)生革 命性的變化,我們現(xiàn)在所應(yīng)用的程序語言也就百變不離奇蹤了!學(xué)編程學(xué)的是什么?思想! 精通一門編程語言 (最好是面向?qū)ο蟮恼Z言) 后再去 搞其他的編程語言, 你會(huì)發(fā)現(xiàn)過程是如 此的行云流水!為什么?你已經(jīng)把編程的思
2、想掌握了,再去學(xué)其他的,無非是學(xué)習(xí)一種新的 語法格式了。 我在這里并不是和你討論怎么去用C+或 JAVA也不是和你討論怎么去學(xué)他們,我要和你 討論的是怎么去理解面向?qū)ο?。其中主要?huì)涉及到“類、對象、繼承、屬性、方法、靜態(tài)、 重載、隱藏、重構(gòu)、聲明、定義、初始化、賦值等”其中有許多相關(guān)技術(shù)我只會(huì)一代而過, 讓你有一種到此一游的意味我就達(dá)到目的了, 而更詳細(xì)的技術(shù)內(nèi)幕, 就請參考其他相關(guān)書籍 而深入研究吧!因?yàn)槲抑皇窃诤湍闾接懭绾稳ジ玫睦斫饷嫦驅(qū)ο螅?如何去提高效率?重復(fù)使用資源,把別人的東西拿來就用。這是很不錯(cuò)的主意!而對于你 來說,最大的資源就是信心以及積極性!好,打起精神來,讓我們一同到面
3、向?qū)ο蟮木幊讨?去尋幽訪勝吧! 注:文章中所有程序?qū)嵗叶际褂肑AVA寫的,當(dāng)然在C+中也就大同小異了了,不同的地 方我會(huì)指出! 注:文章中的正文文字用黑色,說明文字用藍(lán)色,強(qiáng)調(diào)文字用橙色,批改文字用紅色! 正文: 1基本概念: 1.1 類與對象的初探 要我說,無論是面向過程的語言也好,面向?qū)ο蟮恼Z言也罷,我首先要給他講的都是類和 對象! “這個(gè)世界是由什么組成的?” 這個(gè)問題如果 讓不同的人來回答會(huì)得到不同 的答案。如果是一個(gè)化學(xué)家,他也許會(huì)告訴你“還用問嘛?這個(gè)世界是由分子、原子、離子 等等的化學(xué)物質(zhì)組成的” 。如果是一個(gè)畫家 呢?他也許會(huì)告訴你, “這個(gè)世界是由不同的顏色 所組成的”。呵
4、呵,眾說紛紜吧!但如果讓一個(gè)分類學(xué)家來考慮問題就有趣的多了,他會(huì) 告訴你“這個(gè)世界是 由不同類型的物與事所構(gòu)成的” 好! 作為面向?qū)ο蟮某绦騿T來說, 我們 要站在分類學(xué)家的角度去考慮問題!是的,這個(gè)世界是由動(dòng)物、植物等組成的。動(dòng)物又分為 單細(xì)胞動(dòng)物、多細(xì)胞動(dòng)物、哺乳動(dòng)物等等,哺乳動(dòng)物又分為人、大象、老虎就這樣的分 下去了! 現(xiàn)在,站在抽象的角度,我們給“類”下個(gè)定義吧!我的意思是,站在抽象的角度,你回 答我“什么是人類?” 首先讓我們來看看人類所具有的一些特征, 這個(gè) 特征包括屬性 (一些 參數(shù),數(shù)值)以及方法(一些行為,他能干什么?。C總€(gè)人都有身高、體重、年齡、血型等 等一些屬性。人會(huì)勞動(dòng)
5、、人都會(huì)直立行走、人都會(huì) 用自己的頭腦去創(chuàng)造工具等等這些方法! 人之所以能區(qū)別于其它類型的動(dòng)物,是因?yàn)槊總€(gè)人都具有人這個(gè)群體的屬性與方法?!叭祟悺?只是一個(gè)抽象的概念,它僅僅 是一個(gè)概念,它是不存在的實(shí)體!但是所有具備“人類”這個(gè) 群體的屬性與方法的對象都叫人!這個(gè)對象“人”是實(shí)際存在的實(shí)體!每個(gè)人都是人這個(gè)群 老虎不會(huì)直立 體的一個(gè)對 象。老虎為什么不是人?因?yàn)樗痪邆淙诉@個(gè)群體的屬性與方法, 行走,不會(huì)使用工具等等!所以說老虎不是人! 由此可見 類描述了一組有相同特性 (屬性) 和相同行為 (方法)的對象。 在程序中, 類實(shí)際上就是數(shù)據(jù)類型!例如:整數(shù),小數(shù)等等。整數(shù)也有 一組特性和行為。
6、面向過程的語 言與面相對象的語言的區(qū)別就在于,面向過程的語言不允許程序員自己定義數(shù)據(jù)類型,而只 能使用程序中內(nèi)置的數(shù)據(jù)類型! 而為了模 擬真實(shí)世界, 為了更好的解決問題, 往往我們需要 創(chuàng)建解決問題所必需的數(shù)據(jù)類型!面向?qū)ο缶幊虨槲覀兲峁┝私鉀Q方案。 1.2 內(nèi)置數(shù)據(jù)類型與函數(shù): 計(jì)算機(jī)程序在存儲(chǔ)數(shù)據(jù)時(shí)必須跟蹤 3 個(gè)基本屬性為: 1 信息存儲(chǔ)在何處; 2 存儲(chǔ)的值是多少; 3 存儲(chǔ)的信息是什么類型的; 讓我們來看看編程語言的內(nèi)置數(shù)據(jù)類型都有哪些! (呵呵, 這個(gè)不大好說, 因?yàn)槊块T語言都 有自己獨(dú)特的數(shù)據(jù)類型,但這畢竟是少數(shù),比如在JAVA中有byte類型的數(shù)據(jù),而在 C+沖 就沒有, 希望
7、你能舉一反三! )比如整數(shù)” int ”,浮點(diǎn)類型的數(shù)據(jù)” float ”!字符串” String ”, 以及數(shù)組還有結(jié)構(gòu)體等等。然而在寫程序的時(shí)候,根據(jù)需要我們會(huì)創(chuàng)建一個(gè)類型的變量或常 量,例 如:由于我們需要?jiǎng)?chuàng)建一個(gè)整形的變量 i 為 5,我們就可以這樣做,int i = 5; 而根 據(jù)需要我很有可能改變 i 的值,也就是從新給它賦值,比如讓它等與 6,就可以在所需的地 方改成 i = 6; 由此我們知道,在“值”上可以發(fā)生變化的量就叫變量。不會(huì)發(fā)生變化的量就 叫做常量了,在C+沖用count關(guān)鍵字來聲明,而在JAVA中則使用final關(guān)鍵字來聲明。由 于不同語言的聲明格式不一樣,這里就不
8、做一一介紹了,詳細(xì)的內(nèi)容清查閱相關(guān)書籍! 在這里我們主要討論一下函數(shù), 我們可以把函數(shù)想象成一個(gè) “實(shí)現(xiàn)某種特定功能的黑匣子” 這個(gè)功能是由你來設(shè)定的,舉個(gè)例子來說:現(xiàn)在我問 你“ 2+3 等于多少”?我相信 你能很快的回答我等于 5。讓我們來分析分析這句話包含什么信息!首先我要把你的大腦想 象成是一個(gè)黑匣子,我并不知道也沒有必 要知道你的大腦是如何工作的(也就是怎么運(yùn)算 的),我關(guān)心的只是我傳給你的是什么信息?你對信息做了哪些處理?以及你返回給我的是 什么信息?需要提醒你一下的是每個(gè)方法都會(huì)返回一個(gè)信息給調(diào)用者的,除了構(gòu)造函數(shù)外 (稍 候我會(huì)作詳細(xì)的介紹) 。我現(xiàn)在需要把自己當(dāng)作是 一名程序
9、員, 而你呢?當(dāng)然就是計(jì)算機(jī)了! 計(jì)算即可沒有人那么聰明,它只會(huì)按事先約好的特定的格式運(yùn)行,我想讓它具有如上所述的 功能, 我就要先定義這個(gè)黑匣 子!首先我要告訴這個(gè)黑匣子會(huì)有兩個(gè)整數(shù)值給你 (這就是所 謂的參數(shù), 是程序員需要給黑匣子的信息) ,然后就要定義這個(gè)黑匣子內(nèi)部實(shí)現(xiàn)這兩個(gè)整數(shù)相 加的運(yùn)算 (這就是黑匣子對數(shù)據(jù)所做的加工, 根據(jù)需要, 你可以做任何的加工。 )。最后再標(biāo) 注它返回給我一個(gè)同樣是整型的數(shù)值(這是黑匣子返回給程序員的信息)。一個(gè) 函數(shù)就這樣 定義完了,讓我們來看看書寫格式: int addnum(int x,int y) return x+y; 具體的含義是這樣的: in
10、t /* 返回值類型 */ addnum /* 方法(黑匣子)名稱 */ (int x,int y/*傳入的參數(shù) */) return x+y; /* 內(nèi)部是想方法(實(shí)現(xiàn)相加運(yùn)算, )并用 return 返回給調(diào)用者結(jié)果 */ 首先請注意上明的 “ return ”語句! return 關(guān)鍵字的含義是向調(diào)用者返回緊跟在它后面的信 息!就像上面一樣,因?yàn)槲覇柲?,你才?huì)回答我,如果我不問你,你就不用回答我的!在計(jì) 算機(jī)中也一樣, 定義好這 個(gè)函數(shù)在哪里調(diào)用呢?我只能告訴你, 哪里需要就在哪里調(diào)用! 當(dāng) 然,你可以根據(jù)需要去更改參數(shù)、返回值以及內(nèi)部實(shí)現(xiàn),具體到如何定義如何調(diào)用你只好去 參考相 關(guān)的資
11、料了!在這里我只是給你一個(gè)思想! 有時(shí)你會(huì)遇到這樣的問題, 我讓你記住, 我的年齡是 20 歲! 從字面上理解, 你并沒有給我 返回信息!然而事實(shí)上,你確實(shí)給我返回了信息,信息的內(nèi)容是“無信息,也就是無返回值 類型 void ”。具體的程序如下: int myAge = 0; int a=20; void remAge(int a) myAge=a; 具體的函數(shù)說明如下: int myAge =0; /定義并初始化我的年齡為 0; int a=20; /* 定義變量 a 等于 20*/ void /* 返回值類型為無返回值類型 */ remAge /* 函數(shù)名稱 */(int a /*傳入的參
12、數(shù) */) myAge=a; / 內(nèi)部實(shí)現(xiàn)方法,注意,沒有 return 返回! 關(guān)于函數(shù)的話題還有很多很多,這里就不一一介紹了,我的目的是讓你知道函數(shù)是怎么一 會(huì)事兒!為下面的討論作鋪墊! 1.3 指針以及引用: 指針及引用是在 C+沖有的,JAVA中沒有。JAVA中取消了對內(nèi)存的操作,隨之而來的事也 取消了操作符重載的操作。 不過在稍候我還是會(huì)介紹一些操 作符重載的功能等。 引用主要還 是用在函數(shù)參數(shù)的傳遞上。所以我在這里就不做過多的介紹了。他們很實(shí)用,有興趣的同學(xué) 可以參閱C+相關(guān)書籍。 1.4 運(yùn)算符及控制語句: 還是自己看看相關(guān)書籍吧,這里就不再熬述了! 2深入探討面向?qū)ο螅?2.1
13、 “類型”的內(nèi)部細(xì)節(jié): 有了上面的知識(shí),我們現(xiàn)在就可以深入的挖掘類的內(nèi)部實(shí)現(xiàn)了。所有的知識(shí)點(diǎn)我都會(huì)圍繞 著類與對象展開,在此之前,我希望你能夠確信對以上所介紹的基本內(nèi)容已完全掌握了! 是的,面向?qū)ο蟮木幊陶Z言最大的特色就是可以編寫自己所需的數(shù)據(jù)類型,以更好的解決 問題。我想我必須要幫你搞清楚“類,對象,屬性,方法它們之間的關(guān)系”!就像我前面所 說的,人這個(gè)“類”是什么也做不了的,因?yàn)椤叭祟悺敝皇且粋€(gè)抽象的概念,它不是實(shí)實(shí)在 在的“東西”,而這個(gè)“東西”就是所謂的對象。 只 有人這個(gè) “對象” 才能去工作。 而類呢?類是對象的描述!對象從類中產(chǎn)生出來!此時(shí),對象具有類所描述的所有的屬性以及方法。
14、 一定要理解這句 話! 也許你已經(jīng)有些不知所措了,沒關(guān)系!好好的回味一下,我再舉個(gè)例子!例如電視機(jī),電視 機(jī)都有工作原理圖,那么什么叫電視機(jī)呢?只要它能夠?qū)崿F(xiàn)工作原理圖的 所有功能的物體, 我們都叫它電視機(jī)。你想想是不是這么一回事兒?可是,電視機(jī)原理圖是不能工作的,也就 是這個(gè)原理圖不能收看節(jié)目, 只有電視機(jī)這個(gè) “實(shí)體 即所謂的對象” 才能收看節(jié)目, 也 就是說,從類生成出對象之后才算得上是真正的有意義!才能開始工作。此時(shí),電視機(jī)擁有 電視原理圖所描述的所有的屬性及 方法!明白了吧,呵呵! 我先前介紹過, 類是屬性與方法的集合。 而這些屬性與方法可以被聲明為私有的( private ), 公
15、共的 (public) 或是受保護(hù) (protected) 的,他們描述了對類成員的訪問控制。 下面我分別做 一下介紹: 1 公共的( public ):把變量聲明為公共類型的之后,那么就可以通過對象來直接訪問, 一切都是暴露無遺的!也就是說,你的信用卡密碼別人也能夠直接得到。 2 私有的( private ):如果把變量聲明為私有的情況就好多了,想要得到我的信用卡密 碼,對象必須要調(diào)用專用的方法才能夠得到。 3 受保護(hù)的( protected ):介紹繼承時(shí)再討論。 4 .默認(rèn)控制訪問符(friendly ) : /JAVA中有而C+中沒有。 為了實(shí)現(xiàn)數(shù)據(jù)的封裝,提高數(shù)據(jù)的安全性,我們一般會(huì)
16、把類的屬性聲明為私有的,而把類的 方法聲明為公共的。 這樣,對象能夠直接調(diào)用類中定義的所有方法, 當(dāng)對 象想要修改或得到 自己的屬性的時(shí)候就必須要調(diào)用以定義好的專用的方法才能夠?qū)崿F(xiàn)。你想想,你會(huì)把你的信 用卡密碼公布出來嘛?呵呵!所以,我們提倡的是: “對象調(diào)方法,方法改屬性” ; 2.2 通過實(shí)例看內(nèi)存分配: 說了這么多,讓我們來看一個(gè)實(shí)例吧!比如:現(xiàn)在我們要編寫某家公司員工管理系統(tǒng),你 認(rèn)為最合適的數(shù)據(jù)類型是什么?我認(rèn)為是員工個(gè)人! 但是在面向過程的 語言中, 這樣做是不 允許的,因?yàn)樗荒苁褂谜Z言中的內(nèi)部數(shù)據(jù)類型!而員工不在這個(gè)內(nèi)部數(shù)據(jù)類型之內(nèi)!也許 有人會(huì)說可以用 C 語言中的 str
17、uct ,好注意! 畢竟它是類的基礎(chǔ)!如果你以前是一名面 C 或 B 的程序員,請你忘掉這些,讓我們一起看看如何用類來實(shí)現(xiàn)這一切吧! 某家公司的員工是人類的一個(gè)特殊群體,它除了具備人類的所有特性與方法外,它還有額 外的特性與方法, 比如她有她的工資、 信用卡密碼、 作息時(shí)間等等, 這 些特性以及工作內(nèi)容, 工作量等等這些方法。而在計(jì)算機(jī)中我們該如何定義這個(gè)類呢?下面我將寫出它的格式,讓 你看看在計(jì)算機(jī)中它是張什么樣子的! /*在此我需要再次聲明的是,我用的是JAVA格式,在語法格式上它與 C+大不相同!許多細(xì) 節(jié)以及內(nèi)部操作都有諸多區(qū)別,而在思想上確實(shí)大同小異的 */ /employee.ja
18、va public class employee private String name; / 員工姓名 private int age; / 員工年齡 private char sex; / 員工性別 private float emolument; / private boolean lunch; / / 等等 public void heater() / 員工薪水 員工午餐 這個(gè)方法是用來加工員工的午餐 lunch = true; public void setName(String a) / 這個(gè)方法是修改員工的姓名 name= a; public String getName() /
19、 return name; 這個(gè)方法是得到員工的姓名 / 等等 這樣我們就定義完了我們所需要的數(shù)據(jù)類型?,F(xiàn)在,讓我們來看看它能夠干什么以及怎么 工作! 我想要做的是,工作室里有一個(gè)光桿司令叫“ jingwei ”,我修改它的名字后對對它進(jìn)行輸 出,看看我是怎么做的吧! 注意:請仔細(xì)觀察對象是如何調(diào)用方法的,它使用了“ . ”操作符!事實(shí)上是這樣的,對象調(diào) 用公共的屬性或方法時(shí)就會(huì)使用“ . ”操作符。 然而在C+中,如果定義一個(gè)同類型的指針,該指針調(diào)用此對象的方法時(shí),就會(huì)使用“- 操作符。更詳細(xì)的內(nèi)容清參閱相關(guān)書籍了! /workstation.java import java.awt.Gra
20、phics; import java.applet.Applet; public class workstation extends Applet private employee jingwei ; / public void init() jingwei = new employee(); /* jingwei.setName(“ jw ” ); / public void paint(Graphics g) 對象的聲明,此時(shí)并不分配內(nèi)存! 此時(shí)創(chuàng)建對象會(huì)調(diào)用構(gòu)造函數(shù),稍候介紹 設(shè)置我的名字 */ g.drawString(my age is +jingwei.getName(),10,1
21、0);/ 顯示我的年齡 輸出結(jié)果是: my name is jw 這串字符串是在輸出窗口的 x 坐標(biāo)軸為 10 px , y 坐標(biāo)軸為 10 px 的位置。 我現(xiàn)在要做的是, 把上面的程序做個(gè)大解剖, 讓你能夠看清楚它到底是怎么一回事兒! (我可 不時(shí)帶你去看里面的匯編,呵呵,那個(gè)我也不會(huì): ) 首先還是來看看我們自定義的數(shù)據(jù)類型employee,在應(yīng)用的時(shí)候它和int類型的數(shù)據(jù)沒什 么兩樣,一樣的需要?jiǎng)?chuàng)建變量(對象) ,只不過前者是咱自 己定義的,而后這是它內(nèi)置的。 Employee 這個(gè)類中有許多屬性,也有許多方法。而此時(shí),我們不能直接用我們所創(chuàng)建出來的 對象調(diào)用它的屬性進(jìn)行修改。 因 為
22、它是 private 受保護(hù)類型的! 我要想修改我的姓名我就要 用對象調(diào)用 setName() 這個(gè)方法,而我想得到我的姓名就要調(diào)用 getName() 這個(gè) 方法。我們 完全是按照航線來行走的,這個(gè)航線就是“對象調(diào)方法,方法改屬性” 好的,我真的相信你已經(jīng)明白了這是怎么一回事兒了!呵呵!仰起航帆,繼續(xù)前行! 現(xiàn)在讓我們一起來看看 workstation 這個(gè)類。這是個(gè)主類,和 C+沖的ma in ()函數(shù)的味道差 不多。其中,在 JAVA中,一個(gè)文件只允許有而且必須有一個(gè)主類,這個(gè)主類用public來聲 明!他就跟 C+中必須要有一個(gè) main()函數(shù)是一樣的。 讓我們來看看這個(gè)類中的第一條
23、語句! private employee jingwei ; 這條語句的作用是聲 明一個(gè)employee的對象jingwei (在C+中就不用聲明了)。我想要和你說的是聲明”與定 義”之間的區(qū)別。聲明只是 告訴計(jì)算機(jī)將要有這樣的一個(gè)變量(對象) ,在內(nèi)存中它并不為 這個(gè)變量(對象)分配內(nèi)存!而只有在定義的時(shí)候才會(huì)給這個(gè)變量(對象)分配內(nèi)存。(需要 說明一 下的是 init() 方法是完成初始化操作的, 在此處定義對象, 為對象分配內(nèi)存。 start() 方法用來啟動(dòng)瀏覽器的主線程, paint() 方法來顯示 Apple 的界面。 這些是 Applet 程序所需 的,至于Application
24、程序就不需要了,當(dāng)然了,C+中也不需要他們。 關(guān)于他們的詳細(xì)內(nèi)容 清參閱 相關(guān)書籍) 緊接著就開始定一個(gè)對象了,對 jingwei 這個(gè)對象進(jìn)行操作才會(huì)有實(shí)際的意義。千萬不要 有這種想法: “試圖對類進(jìn)行操作! ”就像前面我說的, 電視機(jī) 原理不能看電視一樣! 這是毫 無意義的!看這條語句 jingwei = new employee(); 它的意思就是定義一個(gè) employee 類型的 對象 jingwei 。此時(shí),我想告訴你的是: “jingwei 這個(gè)對想擁有了些什 么”。它擁有了類所 描述的所有的屬性及方法。下面我一一給你列出來: /* 所有的 employee 對象都擁有這些屬性。
25、每創(chuàng)建一個(gè)對象就會(huì)從新分配一塊內(nèi)存來存放相應(yīng) 對象的這些屬性。我的意思是每個(gè)對象都有自己“獨(dú)特”的一份 */ private String name; / 員工姓名 private int age; / 員工年齡 private char sex; / 員工性別 private float emolument; /員工薪水 private boolean lunch; / 員工午餐 /* 所有的 employee 對象都擁有這些方法。但在內(nèi)存中只有一份 */ public void heater() /這個(gè)方法是用來加工員工的午餐 lunch = true; public void setNa
26、me(String a) /這個(gè)方法是修改員工的姓名 name= a; public String getName() / 這個(gè)方法是得到員工的姓名 return name; /* 但是,實(shí)際上在創(chuàng)建 jingwei 這個(gè)對象時(shí)計(jì)算機(jī)只給這個(gè)對象的所有的屬性分配了內(nèi)存, 而并沒有給方法分配內(nèi)存。方法只有一個(gè),是屬于所有的對象的,所以無論創(chuàng)建了多少個(gè)對 象,計(jì)算機(jī)只會(huì)為一個(gè)方法分配一塊內(nèi)存。*/ 我想我還是舉個(gè)例子吧,不然你非暈倒不可。呵呵! 看我這條語句“ private boolean lunch;”公司不管午餐,每個(gè)員工都需要帶飯。我們現(xiàn) 在這樣想,公司的空間是所有的內(nèi)存容量,你的辦公桌就
27、是計(jì)算機(jī)中的內(nèi)存中的一部分(每 個(gè)員工都有 一份,是在創(chuàng)建對象時(shí)分配的) 。你把午飯帶到了公司,放在了你的辦公桌上。 “午飯”占據(jù)了你的辦公桌的一角(占了你自己“對象”的一塊內(nèi)存容量) 。這份午 飯只屬 于你自己,同樣別人的也只屬于她自己!所以每個(gè)員工(對象)都需要一快空間(內(nèi)存)來 存放自己的午餐(屬性) 。在計(jì)算機(jī)中也是這樣的,每創(chuàng)建一個(gè)對 象,就會(huì)在內(nèi)存中從新分 配一塊內(nèi)存來放“午餐 lunch ”這個(gè)屬性(對象所擁有的所有的屬性) 。 計(jì)算機(jī)只會(huì)為對象的屬性分配內(nèi)存。因?yàn)槊總€(gè)對象的都不一樣!就像你往公司帶的午飯和 我往公司帶的午飯不一樣是一個(gè)道理! 但方法就不同了。 早晨帶的飯中 午就
28、涼了, 你需要用 微波爐來加熱。微波爐可不用你帶,公司就有(只占公司的一塊空間) ,它放在了午餐桌上。 你想想, 微波爐屬于誰的?它屬于所有員工的! 因 為每個(gè)員工都可以用它。 而不必每個(gè)員工 都帶一份。由此可見,每個(gè)員工(對象)都有一份午飯(屬性) ,但所有的員工(對象)只一 個(gè)微波爐 (方法)。所有的員 工(對象) 都可以通過這個(gè)微波爐 (方法) 來改變自己午餐 (屬 性)的冷熱狀態(tài)。殊途同歸!在計(jì)算機(jī)中也就是這樣,方法只有一份,供所有的對象使用! 而屬性是 每個(gè)對象一份, 因?yàn)槊總€(gè)對象的都不一樣。 別和我說你還不明白, 不然我會(huì)撞墻的, 呵呵:) 2.3 深入探討函數(shù): 2.3.1 構(gòu)造
29、函數(shù)、默認(rèn)構(gòu)造函數(shù)、 缺省構(gòu)造函數(shù) 對于上面的實(shí)例,它已經(jīng)能完成絕大部分工作了,但它還是不完善的,還有許許多多的細(xì) 節(jié)等到我們?nèi)ネ晟?!也許有的同學(xué)已經(jīng)注意到了,當(dāng)我創(chuàng)建完“ jingwei ”這個(gè)對象時(shí),這 個(gè)對象的所有的屬性都是空的,也就是說:這個(gè)對象的姓名是未定的、年齡是未定的、性別 是未定的、 薪水是未定的、 午餐也是 未定的。 而我們想把這些屬性都添加上去, 就還要用對 象調(diào)用相應(yīng)的方法,去一個(gè)個(gè)修改!天啊,這簡直是太麻煩了!有沒有什么好方法能夠在我 們創(chuàng)建對象的同時(shí) 就完成了對屬性賦值的操作呢?哦不, 應(yīng)該說是對屬性的初始化呢?當(dāng)然 沒問題了,這就需要所謂的構(gòu)造函數(shù)! 構(gòu)造函數(shù)是類中
30、最特殊的函數(shù),它與析構(gòu)函數(shù)的功能正好相反! 從特征上來說: 1. 它是編程語言中唯一沒有返回值類型的函數(shù)。 2. 它的名稱與類的名稱必須要完全相同。 3. 它必須被聲明為公共( public )的類型 4, 可以對構(gòu)造函數(shù)進(jìn)行重載。 5. 它在創(chuàng)建對象是自動(dòng)被調(diào)用。 從功能上來說: 1. 它是對類中的屬性進(jìn)行初始化。 其實(shí),對于上面的程序來說我們沒有自己定義構(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ì)再為你的程序
31、添加一個(gè)缺默認(rèn) 造函數(shù)了。(在這里,我們提倡的是自己定義構(gòu) 造函數(shù),而不是用系統(tǒng)的默認(rèn)構(gòu)造函數(shù)) 還是看個(gè)實(shí)例吧!這樣比較清楚一些! /employee.java public class employee private int age; / 員工年齡 private char sex; / 員工性別 private float emolument; / 員工薪水 private boolean lunch; / 員工午餐 / 等等 public employee() / 這個(gè)就是“默認(rèn)”構(gòu)造函數(shù) name = “jw”; / 設(shè)置員工姓名 age = 20; / 設(shè)置員工年齡 sex =
32、“M”; / 設(shè)置員工性別 emolument = 100; / 設(shè)置員工薪水 lunch = false; /設(shè)置員工午餐 這個(gè)方法是用來加工員工的午餐 / public void heater() / lunch = true; 等等 ; 這樣,在我們創(chuàng)建“ jingwei ”這個(gè)對象的同時(shí),它的所有的屬性也被初始化了!顯然,這 大大的提高了工作效率, 但是, 它還是不符合要求。 想想看, 如果我們現(xiàn)在創(chuàng)建這個(gè)類型的 第二個(gè)對象的時(shí)候會(huì)發(fā)生什么事情?告訴你, 除了對象的 “名”(這個(gè)名稱不在是對象屬性中 的名稱,而是對象本身的名稱)不一樣 外,其所有的“屬性值”都一樣!比如:現(xiàn)在我們創(chuàng) 建
33、第二個(gè)對象 flashmagic ,然而我會(huì)發(fā)現(xiàn)這個(gè)對象的所有的屬性和 jingwei 這個(gè)對象的所有 的 屬性完全相同。 而我們只能在用對象的方法去改變著寫屬性了! 很顯然, 這種方法不大好! 我們需要一種方法在創(chuàng)建對象的時(shí)候?yàn)閷ο蟮膶傩再x予“我們想要的 值”。 相信你也看到了,默認(rèn)構(gòu)造函數(shù)就顯得無能為力了。我們需要的是帶參數(shù)的構(gòu)造函數(shù),在 創(chuàng)建對象時(shí),我們把參數(shù)傳給構(gòu)造函數(shù),這樣就能完成了上述的功能!口說無憑,還是來看 個(gè)實(shí)例吧: /employee.java public class employee private String name; /員工姓名 private int age;
34、 / 員工年齡 private char sex; / 員工性別 private float emolument; / 員工薪水 private boolean lunch; / 員工午餐 / 等等 public employee(String n,int a,char s,float e,boolean l) / name = n; / 設(shè)置員工姓名 age = a; /設(shè)置員工年齡 sex = s; /設(shè)置員工性別 emolument = e; / 設(shè)置員工薪水 lunch =l; /設(shè)置員工午餐 public void heater() /這個(gè)方法是用來加工員工的午餐 lunch = true; 看這個(gè)構(gòu)造函數(shù) / 等等
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中語文掐辮子閱讀題答案
- 2024年自動(dòng)多排鉆項(xiàng)目合作計(jì)劃書
- 2024年中高壓及特殊性能玻璃鋼管項(xiàng)目合作計(jì)劃書
- 玉溪師范學(xué)院《公司治理》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024噴繪制作安裝合同書
- 2024中融信托沈陽和泓集合資金信托合同
- 2024廣告牌拆除施工合同參考范文
- 鹽城師范學(xué)院《應(yīng)用隨機(jī)過程實(shí)驗(yàn)》2022-2023學(xué)年第一學(xué)期期末試卷
- 鹽城師范學(xué)院《物聯(lián)網(wǎng)信息安全技術(shù)》2022-2023學(xué)年期末試卷
- 2024年印刷機(jī)械專用配件:膠輥項(xiàng)目發(fā)展計(jì)劃
- 2023年江蘇省公安機(jī)關(guān)招考錄用人民警察簡章
- 2024年山東省濟(jì)寧市中考數(shù)學(xué)試題(解析版)
- 漸開線齒廓及嚙合特性講解
- 水工建筑物練習(xí)題庫(附答案)
- 2024新老物業(yè)移交協(xié)議
- 在線網(wǎng)課知道智慧《電路(1)(山大)》單元測試考核答案
- 不履行合同義務(wù)催告函范文
- 小學(xué)二年級(jí)上冊數(shù)學(xué)-數(shù)角的個(gè)數(shù)專項(xiàng)練習(xí)
- 項(xiàng)目目標(biāo)成本測算書樣表
- 小學(xué)課外閱讀案例分析
- 家長會(huì)課件:小學(xué)四年級(jí)數(shù)學(xué)期中家長會(huì)課件
評論
0/150
提交評論