資源描述:
《java就業(yè)培訓(xùn)教程第三章 面向?qū)ο?上)new》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第3章面向?qū)ο螅ㄉ希?.1面向?qū)ο蟮母拍蠲嫦驅(qū)ο笫橇畲蠖鄶?shù)人都只可意會,難以言宣的大概念。我下面的講解主要是沖著幫你迅速理解面向?qū)ο蟮膬?nèi)涵而來的,不見得非常嚴(yán)謹(jǐn)和完全正確,但我個(gè)人認(rèn)為是合理的,是我的體會和認(rèn)識,我也曾經(jīng)用過同樣的方式,讓許多人仿佛一下子就明白了什么是面向?qū)ο蟆J裁词敲嫦驅(qū)ο螅@是一個(gè)相對概念,是相對面向過程而言的。就象要理解什么是幸福,要先理解什么是痛苦一樣的道理,在講解面向?qū)ο笾?,我要先簡單介紹一下什么是面向過程。3.1.1面向過程在早期出現(xiàn)的編程語言中,如大家都非常熟悉的C語言,當(dāng)我們要用這種語言來定
2、義一個(gè)復(fù)雜的數(shù)據(jù)類型,譬如Windows窗口時(shí),可以用結(jié)構(gòu)體(struct)來實(shí)現(xiàn),只要在結(jié)構(gòu)體中使用那些基本的數(shù)據(jù)類型來定義窗口的大小,位置,顏色,背景等屬性就可以了。如果我們要對一個(gè)Windows窗口進(jìn)行各種操作,如隱藏窗口,移動窗口,最小化窗口等等,我們要為每個(gè)操作都定義一個(gè)函數(shù),這些函數(shù)與窗口本身的定義沒有任何關(guān)系,如HideWindow,MoveWindow,MinimizeWindow,這些函數(shù)都需要接受一個(gè)參數(shù),即要操作的窗口。這是一種謂語與賓語的關(guān)系,“隱藏”、“移動”等是謂語,“窗口”是賓語。程序的重心集中
3、在函數(shù)(即謂語)上。3.1.2面向?qū)ο笤贑++,java語言中,我們可以將一個(gè)窗口當(dāng)作一個(gè)主體(對象)來看,定義窗口時(shí),除了要指定在面向過程中規(guī)定的那些屬性,如大小,位置,顏色,背景等外,還要指定該窗口可能具有的動作,如隱藏,移動,最小化等。我們在定義窗口時(shí),就要定義好對應(yīng)這些動作的函數(shù)(也叫方法),如Hide,Move,Minimize,注意體會這些函數(shù)名稱與上面的名稱的區(qū)別,這是作者刻意這么安排的,讓讀者更好地去對比,從函數(shù)名稱上就能看出,這些函數(shù)都不再接受代表窗口的參數(shù)。這些函數(shù)被調(diào)用時(shí),都是以某個(gè)窗口要隱藏,某個(gè)窗口
4、要移動,某個(gè)窗口要最小化的語法格式來使用的。這是一種主語與謂語的關(guān)系,程序的重點(diǎn)集中在主體/對象(主語)上。雖然讀者在下面的講解中能夠發(fā)現(xiàn)面向?qū)ο蟮闹R遠(yuǎn)不止這一點(diǎn)(剛才講的只是面向?qū)ο蟮囊粋€(gè)方面,即封裝性,用類封裝了數(shù)據(jù)與函數(shù)),真正能體現(xiàn)面向?qū)ο蟮膹?qiáng)大優(yōu)勢的地方,是在面向?qū)ο蟮睦^承與多態(tài)性方面,但作者認(rèn)為,封裝性是面向?qū)ο蟮母春妥罡镜膶傩浴ava類同其他面向?qū)ο蟮木幊陶Z言一樣,也支持面向?qū)ο?OOP)的三個(gè)特征:u封裝(Encapsulation)u繼承(Inheritance)u多態(tài)(Polymorphism)要
5、想領(lǐng)悟面向?qū)ο蟮乃枷?,不能把學(xué)習(xí)重點(diǎn)放在術(shù)語的死記硬背上,形而上學(xué),而應(yīng)該把精力主要放在實(shí)踐和思考上,通過大量實(shí)踐去理解和掌握。如果讀者到現(xiàn)在還不能完全明白面向?qū)ο笫鞘裁?,也沒關(guān)系,學(xué)完下面的內(nèi)容后,再回過頭來看吧!1063.2類與對象面向?qū)ο蟮木幊趟枷肓D使在計(jì)算機(jī)語言中對事物的描述與現(xiàn)實(shí)世界中該事物的本來面目盡可能的一致,類(class)和對象(object)就是面向?qū)ο蠓椒ǖ暮诵母拍睢n愂菍δ骋活愂挛锏拿枋?,是抽象的、概念上的定義;對象是實(shí)際存在的該類事物的個(gè)體,因而也稱實(shí)例(instance)。如圖3.1所示就是一個(gè)
6、典型的說明:圖3.1其中,汽車設(shè)計(jì)圖就是“類”,由這個(gè)圖紙?jiān)O(shè)計(jì)出來的若干的汽車就是按照該類產(chǎn)生的“對象”。可見,類描述了對象的屬性和對象的行為,類是對象的模板、圖紙。對象(Object)是類(Class)的一個(gè)實(shí)例(Instance),是一個(gè)實(shí)實(shí)在在的個(gè)體,一個(gè)類可以對應(yīng)多個(gè)對象。如果將對象比作汽車,那么類就是汽車的設(shè)計(jì)圖紙。所以面向?qū)ο蟪绦蛟O(shè)計(jì)的重點(diǎn)是類的設(shè)計(jì),而不是對象的設(shè)計(jì)。同一個(gè)類按同種方法產(chǎn)生出來多個(gè)對象,剛開始的狀態(tài)都應(yīng)該是一樣的,好比按照“奔馳s600”型設(shè)計(jì)圖紙生產(chǎn)出來的汽車剛開始都是一樣的,其中一輛“奔馳s
7、600”汽車被改裝后,是不會影響到同型號的其他“奔馳s600”汽車的。但如果修改了“奔馳s600”型的設(shè)計(jì)圖紙,就會影響到以后所有出廠的“奔馳s600”汽車。3.2.1類的定義類可以將數(shù)據(jù)和函數(shù)封裝在一起,其中數(shù)據(jù)表示類的屬性,函數(shù)表示類的行為。定義類就是要定義類的屬性與行為(方法)。請看這段代碼:classPerson{intage;voidshout(){System.out.println(“oh,mygod!myageis“+age);}}106其中,定義了一個(gè)Person類,該類有一個(gè)屬性age,一個(gè)方法shout
8、。類的屬性也叫類成員變量,類的方法也叫類的成員函數(shù)。一個(gè)類中的方法可以直接訪問同類中的任何成員(包括成員變量和成員函數(shù)),如shout方法可以直接訪問同一個(gè)類中的age變量。M腳下留心:如果一個(gè)方法中有與成員變量同名的局部變量,該方法中對這個(gè)變量名的訪問是局部變量,而不再是成員變量。如:c