


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、OOP 技術(shù):易語言面向?qū)ο髮W(xué)習(xí)當(dāng)前有很多編程語言都是支持面向?qū)ο蟮模纾篋ELPHI 、VC+ 、JAVA 等,但大家對(duì)于概念性的一些內(nèi)容,取很難去理解、學(xué)習(xí), 有的學(xué)習(xí)者因?yàn)楦拍钊氩涣碎T,使得放棄了進(jìn) 一步深入學(xué)習(xí)?,F(xiàn)在,易語言3. 8版也支持類(Class) 了,因此,本文通過介紹易語言的面向?qū)ο蟮母拍睿?使大家更加容易地學(xué)習(xí)了解, 再去學(xué)習(xí)其它語言中的相關(guān)知識(shí)就不會(huì)那么 難了。一枯燥的理論1對(duì)象和類要討論“面向?qū)ο蟆?,大家必須首先搞懂什么是 “對(duì)象”。面向?qū)ο缶幊陶Z言中的 “對(duì)象” 概念和我們?nèi)粘I钪姓f的“對(duì)象” 、“東西”或“實(shí)體”非常相似(其實(shí)編程語言中的“對(duì) 象”就是從現(xiàn)實(shí)生
2、活中的“對(duì)象” 、“實(shí)體”的概念發(fā)展而來的) ??梢灾改忝媲暗倪@臺(tái)戴爾 電腦或你家樓下的那輛奔馳轎車,也可以指你們公司的銷售員小張。編程語言中的“類”的概念也和現(xiàn)實(shí)生活中的“類”非常相似。也是對(duì)某一類有共同特 征的“東西” (實(shí)體,也許我們應(yīng)該稱“對(duì)象” )的概括??梢钥闯?, “類”是一個(gè)抽象的概 念,比如當(dāng)你提到“電腦”這個(gè)概念時(shí),你指的不是你面前的這臺(tái)電腦,不是你家隔壁超市 西面出口處用于結(jié)帳的那臺(tái)電腦,也不是世界上任何一臺(tái)具體的電腦,而是指“電腦” 這個(gè)抽象的概念,是“具有處理器、存儲(chǔ)器和輸入、輸出設(shè)備的電子設(shè)備” 。同樣,“員工”指的 也不是你們公司是小張, 不是我們公司的小王, 也不
3、是世界上任何一家公司的任何一個(gè)具體 的工作人員, 而是“服務(wù)于某家公司并定期領(lǐng)取薪水的人” 。上面我們所說的 “電腦” 和“員 工”就是兩個(gè)“類” ,因?yàn)樗鼈兎謩e概括了某一類型的“對(duì)象”的基本特征。另外要說明的 一點(diǎn)是:“類”和“所有這類對(duì)象的集合”也是不一樣的,因?yàn)楹笠粋€(gè)概念雖然也很全面, 但它指的仍然是一大堆具體的對(duì)象,而不是一個(gè)抽象的概念。這也許有點(diǎn)像在玩文字游戲, 希望你能適應(yīng)并喜歡這種游戲規(guī)則, 畢竟做任何事情都是需要 “規(guī)則游戲” 的,面向?qū)ο缶?程也不例外哦。2類的“成員”與“方法”每個(gè)類一般有它的屬性, 比如每個(gè)員工都有自己的 “姓名”,每到月底都可以領(lǐng)到 “日 工資”乘以 “
4、本月出勤天數(shù)” 算出來的工資。 這里的“姓名” 、“日工資” 和“本月出勤天數(shù)” 就是“員工”這個(gè)類的 屬性(或叫“成員” )。而每月工資的計(jì)算方法(日工資 * 本月出勤 天數(shù))就的“員工”類的一個(gè) “方法”。在易語言中的類模塊中,一個(gè)類看起來就像一個(gè)程 序集,類的成員看起來就像一個(gè)程序集變量,類的方法看起來就像程序集中的一個(gè)子程序。(注意,只是 看起來像 ,它們之間還是有很明顯地區(qū)別的)3 實(shí)例化實(shí)例化指的是從一個(gè)類到這個(gè)類的對(duì)象(實(shí)例) ,就像上面說的從“員工”到你們公司 的小張。一個(gè)類并不是一個(gè)可操作的實(shí)體,它只是一個(gè)概念,只有對(duì)象才是可操作的, 比如你們公司必須把薪水發(fā)放給具體的人(比
5、如小張) ,而不是發(fā)放到抽象的“員工”或“銷售 員”。在易語言中,生成一個(gè)類的實(shí)例對(duì)象(實(shí)例化)就是定義一個(gè)以這個(gè)類為數(shù)據(jù)類型的 變量??梢栽谕ㄟ^點(diǎn)( )來使用這個(gè)對(duì)象的方法,進(jìn)而操作這個(gè)對(duì)象(類似于 調(diào)用“窗口 1移動(dòng)()”來移動(dòng)“窗口 1”)。4繼承“電腦”、“員工”這兩個(gè)“類”雖然強(qiáng)大,概括了許許多多的“對(duì)象”,但是他們畢竟太寬泛了, 有時(shí)候我們需要更具體一點(diǎn)的概念。 比如別人問你, 你家的那臺(tái)電腦是臺(tái)什么樣 的電腦,你就絕對(duì)不會(huì)回答: “我家的那臺(tái)電腦是一臺(tái)電腦' ”,而是說出你的電腦的品牌,或具體的配置(比如一臺(tái)“戴爾 8530電腦”或“一臺(tái)奔騰 3電腦”)。同樣,你會(huì)對(duì)別人
6、說, 你們公司的小張是一個(gè) “銷售員”。前面提到的“戴爾8530電腦”和“銷售員”同樣都是類, 但是他們分別比“電腦”、“員工”這兩個(gè)個(gè)類更加具體。這里你從“電腦”到“戴爾8530電腦”和從“員工”至U “銷售員”用的就是“繼承”,因?yàn)榍懊娴拿績(jī)蓪?duì)概念中的后一個(gè)都具備了前一個(gè)的所有特征(比如“銷售員”肯定服務(wù)于某家公司并定期領(lǐng)取薪水),但是有都比前一個(gè)具有更多或更具體的特征(比如銷售員有具體的工作:負(fù)責(zé)銷售,“銷售員”的薪水可能比普通的員工要高一些)沒錯(cuò),編程語言中的繼承就是這樣的??偟恼f來,“繼承”指的是從一個(gè)相對(duì)比較寬泛的類到一個(gè)相對(duì)具體一點(diǎn)的類。在一個(gè)繼承關(guān)系中相對(duì)較寬泛的類被稱做后一個(gè)
7、類的“基類”,相對(duì)較具體的類被稱做前一個(gè)類的“派生類”。當(dāng)然,從這個(gè)相對(duì)較具體的類還可能會(huì)得出更加具體一點(diǎn)的類,這又是一個(gè)繼承關(guān)系,這時(shí),這個(gè)“相對(duì)較具體的類”又成為了“更加具體一點(diǎn)的類”的基類,后一個(gè)就是前一個(gè)的“派生類”,這樣的“具體化”還可能無限繼續(xù)下去。但是“繼承”絕對(duì)不能具體化到某個(gè)具體的“實(shí)體” 也就是對(duì)象(比如從銷售員“具體化”到你們公司的銷售員小張),因?yàn)槔^承只能發(fā)生在兩個(gè)“類”之間,一旦從類具體化到了對(duì)象那就不叫“繼承”了,就成了“實(shí)例化”。二.牛刀小試1.定義一個(gè)類,生成實(shí)例對(duì)象有了理論基礎(chǔ),我們來牛刀小試一把!就以公司的員工為例子吧,打開易語言3.8新建一個(gè)窗口程序,插入
8、一個(gè)“類模塊”輸入如下代碼:基類備注員工利有成員名類型數(shù)組備注姓名*“員工”類前一個(gè)成員方法名取姓名立玉型員工"類的一個(gè)方法返回值類型公開備注丁類的另置姓名V噸類型參考可空備拄員工姓名立本型q犯果煽工姓名*); 城備注:栓驗(yàn)參數(shù)含法性個(gè)方袪:姓名=員工姓名:竦備注:名河就昱逵類的私有成員-i訂返回(X):“針握回(假)本程序定義了一個(gè)類“員工”,這個(gè)類說明了所有公司員工的共同特性一一都有一個(gè)姓名(當(dāng)然,員工的共同屬性肯定不止這些,這里為了簡(jiǎn)單,僅僅考慮“姓名”)并給它定義了一個(gè)文本型成員“姓名”同時(shí)提供了兩個(gè)公開方法用于操作這個(gè)成員。其中“取姓名”方法只是簡(jiǎn)單地返回該類的唯一成員“姓
9、名”;“置姓名”方法用于給“姓名”成員賦值。為了 確?!靶彰背蓡T包含合法的姓名信息,程序在“置姓名”方法里加了參數(shù)合法性檢查。有了一個(gè)類,下面我們來進(jìn)行“實(shí)例化”即從“員工”這個(gè)抽象的概念具體化到一個(gè)公 司的員工張三。然后在啟動(dòng)窗口上放置一個(gè)按鈕,并輸入如下代碼:子程序名返回值類型發(fā)開乖注單擊類型靜態(tài)數(shù)組備注張三員工張三就是員工類的一個(gè)射彖確三.置姓名“張三”)塔備崔:調(diào)用羽象的方擺信尾框咪三取姓名0 Q.) 茨備注;調(diào)用對(duì)恿的方注這里的程序定義了一個(gè)“員工”類型的變量“張三”,也就從“員工”類 實(shí)例化了一個(gè)對(duì)象“張三”。由于“張三”是“員工”類的對(duì)象,所以他就具有了這個(gè)類的所有成員和方 法
10、,然后我們就可以調(diào)用張三這個(gè)對(duì)象的兩個(gè)公開方法對(duì)它進(jìn)行操作了。易語言中所有的類成員均為私有成員,所以我們無法直接通過對(duì)象給它的成員賦值,只能通過調(diào)用公開方法(張三置姓名(“張三”)設(shè)置員工的姓名,而我們?cè)凇皢T工”的“置姓名()”方法中加了參數(shù)合法性檢查,所以實(shí)現(xiàn)了對(duì)類成員的保護(hù)。(其實(shí)這個(gè)保護(hù)是不完整的,如果沒有調(diào)用 |張三置姓名(“張三”),這個(gè)員工還是沒有姓名的,即用“張三取姓名()”方法取得的為空文本,下面在講“ _初始化”方法時(shí)將解決這個(gè)問題。)這里順便說一下類方法的訪問限制。一個(gè)類的方法可設(shè)置為“公開”或“受保護(hù)”,如果一個(gè)類的某個(gè)方法被“公開”就意味這這個(gè)方法可以被該類的其他方法、
11、該類的實(shí)例對(duì)象和它的派生類訪問(即調(diào)用);否則,這個(gè)方法就是“受保護(hù)”方法,受保護(hù)方法只能被該 類的其他方法和它的派生類訪問而不能通過該類的實(shí)例對(duì)象來訪問。比如上面的“張三置姓名(“張三”)”就是通過對(duì)象直接訪問類的公有方法。你可以試著把“員工”類的“取姓 名()”公開欄的勾號(hào)去掉把它變成一個(gè)受保護(hù)方法,再運(yùn)行該程序,易語言編譯器就會(huì) 報(bào)錯(cuò):“錯(cuò)誤(10123):指定方法“取姓名”未被公開,不能在外部被調(diào)用?!笨磥砦覀兊囊渍Z 言還是很聰明的哦。關(guān)于類方法在繼承中的訪問限制,我們將在最后面具體討論。注意:易語言中沒有類的公有(公開)成員,它的所有成員均為私有,所以,一個(gè)類 的所有成員都只能在類的
12、內(nèi)部使用,而不能通過“對(duì)象名成員名=值”的方式來直接訪問類的成員。所以,如果你想把一個(gè)類的某個(gè)成員公開給外部使用,就必須給這個(gè)類添加相 應(yīng)的方法來取和置這個(gè)成員的值。2“ _初始化”與銷毀”在上面的“員工”類的代碼中,還有兩個(gè)方法我沒有提到,那就是這節(jié)的標(biāo)題提到的那兩個(gè)方法。仔細(xì)研究一下,你會(huì)發(fā)現(xiàn)這兩個(gè)方法非常特別。第一:方法名都是以下劃線開頭;第二:它們都是“受保護(hù)”的;第三:它們都沒有返回值和參數(shù);第四:這兩個(gè)方法是 在我們插入一個(gè)類模塊時(shí)自動(dòng)生成的。形式的特殊決定了它們功能的特殊。這兩個(gè)方法是“私有”的,即未公開的,也就是說它們只能在類內(nèi)部使用。在什么時(shí)候使用呢?我們做個(gè)實(shí)驗(yàn),在這兩個(gè)方
13、法中輸入如下代碼:方法名遞回值糞加公開備注初始化當(dāng)基于本類的對(duì)象被創(chuàng)建后此方法會(huì)按自理用輸岀調(diào)試立不 嚴(yán)彊工類 初貽化*)方法名返回值類型益開備注當(dāng)基于本類的對(duì)漿謝證前,憂方法會(huì)戡自動(dòng)調(diào)用輸出調(diào)試文本("員工類銷毀”)更改“ 一按鈕1_被單擊”子程序如下:子程序名返回值董型公開備注歩凱檢單擊奕型欝態(tài)數(shù)組備注員工張三就曇員工発的一牛極輜出調(diào)謚立本 嚴(yán)號(hào)三置姓屯(嚴(yán))張三.置姓名廣張三遷備注:調(diào)用對(duì)象的方法輸岀調(diào)試文本【“張三.取姓名CT )蓿忌框眾三取姓名0 )憑備注:調(diào)甲對(duì)象的方法輸出凋試文本子程序0榕結(jié)束E)然后運(yùn)行調(diào)試運(yùn)行這個(gè)程序,我們發(fā)現(xiàn)易語言是這樣輸出的:在彈出信息框之前:*
14、員工類初始化*張三置姓名()*張三取姓名()彈出信息框之后:*子程序即將結(jié)束*員工類銷毀我們可以發(fā)現(xiàn),“_初始化”是在“員工”類生成對(duì)象“張三”時(shí)被調(diào)用,“ _銷毀”是在該對(duì)象超出作用域,將被銷毀時(shí)調(diào)用。由于“張三“對(duì)象是一個(gè)局部變量,所以它的作用域(生存周期)和它所在的子程序是一樣的,于是,在進(jìn)入這個(gè)子程序后,執(zhí)行第一行代碼之前,“張三”就被創(chuàng)建,“ _初始化”方法被自動(dòng)調(diào)用;在這個(gè)子程序最后一行代碼執(zhí)行完畢 即將退出時(shí)“張三”就被銷毀,“銷毀”方法被自動(dòng)調(diào)用。你也可以用類似的代碼驗(yàn)證一下 對(duì)象作為程序集變量和全局變量使時(shí)的情況。另外,每生成該類的一個(gè)實(shí)例對(duì)象,該類的初始化”就被調(diào)用一次,每
15、銷毀一個(gè)對(duì)象,該類的“_銷毀”方法就被調(diào)用一次(有點(diǎn)像窗口的“創(chuàng)建完畢”和“銷毀”事件)。你可以多招幾名員工(生成“員工”類的多個(gè)實(shí)例,即定義多個(gè)“員工”類型的變量)驗(yàn)證一下哦。這兩個(gè)方法的這種特性在編寫程序時(shí)可以給我們很大的幫助,讓我們有機(jī)會(huì)在一個(gè)對(duì)象被創(chuàng)建時(shí)做一些初始化工作(比如打開一個(gè)文件,初始化類的私有成員),在這個(gè)對(duì)象被銷毀時(shí),做一些善后工作(比如關(guān)閉打開的文件) 。根據(jù)這種特性,我們可以改進(jìn)以上的代碼,實(shí)現(xiàn)對(duì)“姓名”成員的初始化: 更改“員工”類的“ _初始化”方法代碼如下:方法名返回值姿型公幵備注初始化當(dāng)基于本類的對(duì)彖披創(chuàng)建肓I此方法會(huì)被自動(dòng)調(diào)用姓名=“耒命塔”這樣,就算沒有調(diào)用
16、1員工變量置姓名(“張三”),這個(gè)員工也會(huì)有一個(gè)名字(“未命 名”)了,因?yàn)樵谶@個(gè)員工被創(chuàng)建時(shí),“員工”類的“ _初始化”方法被自動(dòng)調(diào)用了。人嘛,怎么能沒有名字呢。注意:不要更改“ _初始化”和“ _銷毀”方法的方法名、參數(shù)、返回值和訪問限制(即 是否“公開”),否則易語言就會(huì)把它們當(dāng)作普通的成員方法或報(bào)編譯錯(cuò)誤。三一個(gè)更豐富的“員工”類為了更好地繼續(xù)我們的討論,首先我們應(yīng)該把上一篇中的“員工”類豐富一下。這次除了可以設(shè)置和取出每個(gè)員工的姓名外,還要實(shí)現(xiàn)一個(gè)功能:計(jì)算月工資。為了簡(jiǎn)單其間,我 們假定月工資計(jì)算公式如下:“月工資 =日工資X 本月出勤天數(shù)”。下面看看這在易語言中如何實(shí)現(xiàn)。打開上次
17、的那個(gè)例程中的“員工”類模塊,添加兩個(gè)成員:基類備注員工私肴成員名類型數(shù)蛆備注w型1金月岀勤天徽整數(shù)型、!.Vp工費(fèi)整數(shù)型J1為了能存取這兩個(gè)私有成員,我們添加如下四個(gè)方法:方法名返回值糞型舍開備r£颶出勒天數(shù)螯數(shù)型¥甜返回體月岀動(dòng)黃數(shù))方任名返回值羹型公開這出觀天數(shù)送輯型*參數(shù)容類型可空警注天數(shù),口如果真伍數(shù) 30)! 誦備注;檢臉參數(shù)臺(tái)法性口為了簡(jiǎn)值耳見,毎亍月均檢30天計(jì)算) ;本月出勒天數(shù)二去數(shù)j 計(jì)返回(X)蓋t 3£1司假)返回值類型公幵毒注恥日工資整數(shù)型7R 返回日工資方法客返回值嬰型備注胃日工資建皋個(gè)杠赍保護(hù)”的方法類型口辰數(shù)組備在工赍-口如果具:
18、資、0)日工資=工費(fèi)注意:我這里把“置日工資”方法設(shè)置為“受保護(hù)”(即沒有公開),這樣當(dāng)一個(gè)員工對(duì)象被創(chuàng)建出來后,就無法在外部對(duì)該員工的“日工資”進(jìn)行修改了,比如“張三置日工資(50)”是編譯不成功的。這樣才能保證公平性,每個(gè)員工的日工資都的一樣的,你想多掙 錢,就要努力出滿勤(或成為一個(gè)銷售員,下面將繼承時(shí),我們會(huì)發(fā)現(xiàn),銷售員的月工資還 包括提成)。更改“ _初始化”方法如下:方法名返回值英型公開初始化當(dāng)墓于本軸劉象被創(chuàng)建后此方法盤檯自硼用姓名=朋耒誥名即 置日工費(fèi)W在初始化時(shí)(每個(gè)員工對(duì)象被創(chuàng)建時(shí))調(diào)用該類的“受保護(hù)”方法“置日工資”設(shè)置其 日工資為30元。注意,雖然這個(gè)方法沒有公開,我們
19、還是可以在這里調(diào)用,是因?yàn)樵谝渍Z 言中,非公開的方法都是 “受保護(hù)”的,是可以在類內(nèi)部被其他方法 (這里是被“_初始化”) 調(diào)用的。(參看本篇開頭)然后,我們的主角出場(chǎng)了,計(jì)算月工資:方滋若趣回值類型公開備注計(jì)理月工資整數(shù)型74返回洋月出黠天毅天日工®這個(gè)方法很簡(jiǎn)單,就是根據(jù)月工資計(jì)算公式計(jì)算出員工該月應(yīng)得的工資并返回。這個(gè)類的使用也很簡(jiǎn)單,比如公司新招聘了兩名員工“張三”和“李四”子程序若返回佰類型備注圣出勤天數(shù)擰鈕被單擊類型靜態(tài)數(shù)組備拄員工李四員張三置姓名“鑾三、李四置姓名(“李E3")到該發(fā)工資時(shí),張三置岀勤天數(shù)C2S)李四置岀勤天甄GS)然后分別計(jì)算二人本月應(yīng)得的工
20、資:信息植嚓三取姓名)+ "本月的工資宵:”+到立本醴三一計(jì)算月工 0)f 0;)信息框 偉四取姓名0 + '嗥月的工責(zé)左:“ *到文豐 陣四”計(jì)算月工資 .口)張三和李四中的任何一個(gè)都不能用過“置日工資”方法來更改自己的日工資,因?yàn)樗且粋€(gè)“受保護(hù)”的方法。四再說繼承上面我們提到,員工不能通過改變自己的日工資來提高收入,但是可以自己成為一個(gè)“銷售員”。我們假定銷售員的工資計(jì)算方式為“工資=日工資 X出勤天數(shù) +銷售額 X0.2”??梢钥闯?,銷售員也是員工,他除了具有所有員工都具有的姓名,出勤天數(shù),日工資 外,還多了一個(gè)“銷售額”屬性,并且工資計(jì)算方式也不一樣了。如果我們從頭
21、寫一個(gè)“銷 售員”類的話,我們得把上面“員工”類中除了“計(jì)算月工資”以外的代碼復(fù)制一份到銷售 員類里,然后加上“銷售額”成員,和相應(yīng)的存取方法,并編寫新的“計(jì)算月工資”方法。你有沒有發(fā)現(xiàn)這樣做我們的新類中有寫東西和以前的“員工”類有重復(fù)呢?這種重復(fù)除了無謂的浪費(fèi)外還造成代碼的維護(hù)困難。面向?qū)ο笳且鉀Q這個(gè)問題的??纯聪旅孢@個(gè)“銷售員”類是任何寫的:現(xiàn)在新插入一個(gè)類模塊:r 盤£'-基類備注梢售員員工私有成員名備注方區(qū)若返回值裘型公開備注置銷售領(lǐng)選輯型7英型口空數(shù)組備注員工誚售額整數(shù)型q如果真 園工銷售跟 口) !梢售顫二員工梢售霰 ;半距回血2寸返回鰻)方法名返回值類型公開
22、備注計(jì)算月工賞整數(shù)型7甜握回取岀對(duì)天數(shù)0 x取日工費(fèi)0 *銷售鋼X 0.2) 沁芷:掏了簡(jiǎn)單我們?cè)诖锇殃庱Y工融整斟遁回我們的“銷售員”類繼承十自“員工”類,所以它擁有了“員工”類的一切。雖然我們 的“銷售員”類沒有“取姓名”、“置姓名”等方法,但是如果你實(shí)例化了一個(gè)“銷售員”類 型的對(duì)象(變量)“銷售員1”,你同樣可以使用“銷售員1置命名()”和“銷售員1.取姓名()”。這兩個(gè)方法從何而來呢?答案只有一個(gè):從“員工”類繼承來的。這就是繼承 的好處,我們不用重復(fù)編寫“銷售員”類的“取姓名”“置姓名”等在“員工”里已經(jīng)寫好的方法了?!颁N售員”除了繼承了它父親“員工”的“遺產(chǎn)”外,也有自己獨(dú)有的成
23、員“銷售額” 和獨(dú)有的“置銷售額()”方法。如果只是繼承遺產(chǎn)而沒有創(chuàng)新,這繼承還有什么意思呢? 下面我們集中看銷售員的“計(jì)算月工資”方法。首先它調(diào)用了 “取出勤天數(shù)()”和“取日工資()”這是“遺產(chǎn)”然后有和銷售額做了運(yùn)算(這是創(chuàng)新)返回。問題是,它既然繼承 自員工,并且繼承了員工的一切東西,那么它是不是也繼承了員工的“計(jì)算月工資()”方法呢?答案是“ Yes”。第二個(gè)問題,那它既然繼承了員工的“計(jì)算月工資()”,它又有自己的“計(jì)算月工資()”,那它是不是有兩個(gè)“計(jì)算月工資()”方法呢?答案是“ No!”。銷售員既然重寫了“計(jì)算工資()”方法,那么通過銷售員對(duì)象調(diào)用的“計(jì)算工資()”實(shí)際上執(zhí)行
24、的是銷售員自己的“計(jì)算月工資()”。也就是說:如果派生類重寫了基類的某個(gè)同名方法,那么在這個(gè)派生類中,從基類繼承來的那個(gè)方法就被“覆蓋”掉了??聪旅娴睦樱悍低殿愋吞庨_薔注主出勤天數(shù)扭鈕-被單擊張三.置地奢廣張三”) 李Hlgft名季H") O就三,置出勤天數(shù)聞 李四.置出歎天數(shù)因) 李叫置銷售毓洌O信息框鉄三裁姓竊0 -“本月的工資宵1 * SK本越三計(jì)篡月工資0)> 0,)信息樞漳四裁姓空0 * “本戸的工賀K: " + 51TX 嗪四計(jì)算月工0).山】這次李四如愿以償, 成了銷售員,雖然他的出勤天數(shù)和張三是一樣的,但是他又調(diào)用了自己的“計(jì)算月工資()”于是,收
25、入的差距就產(chǎn)生了。五. 類的多態(tài)性類的多態(tài)性表示:可以將一個(gè)繼承類對(duì)象賦予到其基類數(shù)據(jù)類型變量中,此時(shí)對(duì)此基 類對(duì)象變量進(jìn)行操作,將反映出繼承類對(duì)象的特性。本篇文章中的程序與前兩篇有很大的改動(dòng),為了解釋清楚類的多態(tài)性,現(xiàn)在在“員工” 基類中增加一個(gè)空的“置銷售額”的方法,結(jié)構(gòu)要一致。如下所示:方注若返回值董型公開備注置銷售鞭邏糧型¥參數(shù)名參考可空數(shù)蛆備注員工稍售餵整轉(zhuǎn)型it遞回假)再新增加一個(gè)新的名為“技術(shù)員”的類,其基類為“員工”類。如下所示:類名基葵備注技術(shù)員員工方法名遞回值糞型冬開備注初貽化當(dāng)基于#類的對(duì)彖被創(chuàng)連后”此方法會(huì)被自勖調(diào)用方祛容返冋值類型公開備注-銷毀當(dāng)基于本類的對(duì)
26、象硝鏘前,此方法合被自動(dòng)調(diào)用然后回到窗口程序集 1中,添加一個(gè)“員工”類型的程序集變量“職工”,程序內(nèi)容全部更改為以下所示:廚口程序集名俁留備注窗口程序集1變塑名r類型備注職工員工予程序名返回値類型備注-置出勧天數(shù)按鈕 被單擊變1名類型數(shù)組晉邇員工技術(shù)員銷音人員聃工=晉通扇工職工.置姓若(“張三"職工冒出勁天數(shù)3借卓眶職工取姓名0 + “本月的工貴為:” +到左本工計(jì)宦月工費(fèi)ox X )0聘工=銷售人虎BtL宣姓名“李四I膽工.養(yǎng)出勒天數(shù)(263職工.量銷雷諏(500)信息握 似工一取姓名0 + *(本月的工資為2 +到文本 職工計(jì)算月工資0 4 )大家可以看出,本程序中將 繼承類對(duì)
27、象“技術(shù)員”和“銷售員”分別賦給 基類對(duì)象“職 工”這樣,“職工”就有了繼承類對(duì)象的特性,在對(duì)銷售人員的操作時(shí),“職工”的方法操作就等同于對(duì)銷售員繼承類對(duì)象的操作。大家也可以看出:基類“員工”有一個(gè)“置銷售額” 方法,而繼承類“銷售員”里也有一個(gè)“置銷售額”方法,但當(dāng)調(diào)用基類的“置銷售額”方 法時(shí),卻因?yàn)槭孪纫驯毁x予了繼承類的對(duì)象,因此實(shí)際調(diào)用的是繼承類的方法。下面如果職工類型太多, 也可以用數(shù)組循環(huán)的方法一次計(jì)算出來。下面是使用數(shù)組的例程序,可以看到也是將繼承類對(duì)象分別賦給基類對(duì)象,調(diào)用時(shí)使用數(shù)組操作分別調(diào)用基類C在此,只是簡(jiǎn)單地使用數(shù)組說明,而沒有使用循環(huán)。實(shí)際上使用數(shù)組更能體現(xiàn)“類的多態(tài)
28、性”的優(yōu)越性,因?yàn)槿绻^承類很多的話,只需使 用一個(gè)循環(huán)就可以實(shí)現(xiàn)所有操作,非常方便。窗口握序集若傑留窗口程序雋】孌量主製型備注職工易工0子程序名返回值類空備注置岀勤天數(shù)按鈕按單擊類型靜態(tài)數(shù)組備拄普通員工扌支術(shù)易梢售人員加入成損 厠工,晉逍員工)期入成昂醐工請(qǐng)售A員)O職工L張三")職工置出勒天數(shù)加)信息框 工】.取姓名0 * '萍月的工費(fèi)対+到文本 昭工1計(jì)算月工資 m 必)O職工 置姓名(“李四")職工置岀勤天數(shù)C23)職工【"置誚售頤STO信息悔鯛工取姓名0 + '早月的工貴対:” *到文本駅工EJ計(jì)算月工費(fèi)0), 1 )六. 虛擬方法實(shí)際上
29、通過上述例程就可以了解什么是虛擬方法了。我為大家分析一下程序面板中類的定義,可以看到,基類“員工”中有一個(gè)“置銷售額”方法,繼承類“銷售員”中也有一個(gè)“置銷售額”方法,當(dāng)子類變量賦值給父類變量后,可 以達(dá)到覆蓋基類方法的目的。當(dāng)然也可以定義一個(gè)抽象虛方法(純虛函數(shù)),即一個(gè)空方法,只提供方法的框架而不編寫任何代碼,實(shí)現(xiàn)的過程完全通過子類的覆蓋來實(shí)現(xiàn)。虛擬方法,又稱為虛函數(shù),是一種虛擬出的方法,其他編程語言中通過“virtual ”關(guān)鍵字來定義虛函數(shù)。overload)。虛擬方法就是允許被子類重新定義父類的方法,這就是常說的函數(shù)的覆蓋(帽程序數(shù)培基本上面向?qū)ο笫悄7铝巳祟惖恼J(rèn)知世界,在編寫一個(gè)大型而實(shí)用的程序時(shí),使用對(duì)向?qū)ο蟮膭?chuàng)作手法要比傳統(tǒng)的編程手法有效。如果程序
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力大數(shù)據(jù)助力金融智能化風(fēng)控
- 供熱設(shè)備檢修管理辦法
- 公共衛(wèi)生中心管理辦法
- 物流行業(yè)的集聚效應(yīng)、技術(shù)創(chuàng)新與高質(zhì)量發(fā)展路徑
- 培訓(xùn)機(jī)構(gòu)審批管理辦法
- 普貨運(yùn)輸安全生產(chǎn)管理制度
- 教師培訓(xùn)方案:有效處理幼兒告狀行為的策略探討
- 大學(xué)生國(guó)防安全教育心得體會(huì)1500字
- 生產(chǎn)經(jīng)營(yíng)單位發(fā)生生產(chǎn)安全事故后應(yīng)立即報(bào)告
- 建設(shè)工程事故等級(jí)分為哪4個(gè)等級(jí)
- 2023-2024學(xué)年山東省日照市高二下學(xué)期期末考試數(shù)學(xué)試題(解析版)
- 2024年 北京市公務(wù)員考試(行測(cè))考試真題試題(附答案)
- 既有建筑地基基礎(chǔ)加固技術(shù)規(guī)范 JGJ 123-2012知識(shí)培訓(xùn)
- 2025至2030中國(guó)改裝車行業(yè)深度發(fā)展研究與企業(yè)投資戰(zhàn)略規(guī)劃報(bào)告
- 中醫(yī)執(zhí)業(yè)醫(yī)師歷年真題及解答
- MT/T 1222-2024液壓支架再制造工程設(shè)計(jì)指南
- 2025年7月浙江省普通高中學(xué)業(yè)水平考試歷史仿真模擬卷01(含答案)
- 2024-2025學(xué)年人教版PEP六年級(jí)下學(xué)期期末試卷(含答案含聽力原文無音頻)
- 2025-2030年中國(guó)聚脲涂料行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 一級(jí)建造師考試安全管理試題及答案
- 鍍鋅板知識(shí)課件
評(píng)論
0/150
提交評(píng)論