面向?qū)ο缶幊蘰pt課件_第1頁(yè)
面向?qū)ο缶幊蘰pt課件_第2頁(yè)
面向?qū)ο缶幊蘰pt課件_第3頁(yè)
面向?qū)ο缶幊蘰pt課件_第4頁(yè)
面向?qū)ο缶幊蘰pt課件_第5頁(yè)
已閱讀5頁(yè),還剩101頁(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)介

1、第三章第三章 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊堂嫦驅(qū)ο缶幊堂嫦驅(qū)ο缶幊蘮學(xué)習(xí)目的學(xué)習(xí)目的n掌握:掌握創(chuàng)建和運(yùn)用類(lèi)對(duì)象、運(yùn)用包的根本方掌握:掌握創(chuàng)建和運(yùn)用類(lèi)對(duì)象、運(yùn)用包的根本方法。法。n了解:了解面向?qū)ο蟪绦蛟O(shè)計(jì)的根本思想和面向了解:了解面向?qū)ο蟪绦蛟O(shè)計(jì)的根本思想和面向?qū)ο蟮母拍睢?duì)象的概念。n了解:類(lèi)的多態(tài),接口的聲明及實(shí)現(xiàn)方法。了解:類(lèi)的多態(tài),接口的聲明及實(shí)現(xiàn)方法。n重點(diǎn)重點(diǎn)n明確各種修飾符的作用,了解承繼和復(fù)用的概念明確各種修飾符的作用,了解承繼和復(fù)用的概念n了解父類(lèi)和子類(lèi)了解父類(lèi)和子類(lèi)n學(xué)會(huì)學(xué)會(huì)Java類(lèi)的定義和對(duì)象的創(chuàng)建。類(lèi)的定義和對(duì)象的創(chuàng)建。 n難點(diǎn)難點(diǎn)n了解多態(tài)性是如何擴(kuò)展和維護(hù)系統(tǒng)性能了

2、解多態(tài)性是如何擴(kuò)展和維護(hù)系統(tǒng)性能n類(lèi)多態(tài)的實(shí)現(xiàn)。類(lèi)多態(tài)的實(shí)現(xiàn)。本講要點(diǎn)本講要點(diǎn)面向?qū)ο缶幊堂嫦驅(qū)ο缶幊堂嫦蜻^(guò)程和面向?qū)ο竺嫦蜻^(guò)程和面向?qū)ο髇 面向過(guò)程程序設(shè)計(jì)表示圖面向過(guò)程程序設(shè)計(jì)表示圖 面向?qū)ο蟪绦蛟O(shè)計(jì)表示面向?qū)ο蟪绦蛟O(shè)計(jì)表示圖圖 1-4面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?.1面向?qū)ο蟮乃枷朊嫦驅(qū)ο蟮乃枷?n面向?qū)ο蟮母靖拍蠲嫦驅(qū)ο蟮母靖拍?n對(duì)象是具有某種特性和某種功能的東對(duì)象是具有某種特性和某種功能的東西。西。n將同一種類(lèi)型的對(duì)象歸為一個(gè)類(lèi)。將同一種類(lèi)型的對(duì)象歸為一個(gè)類(lèi)。n類(lèi)是對(duì)象的籠統(tǒng),對(duì)象是類(lèi)的實(shí)例。類(lèi)是對(duì)象的籠統(tǒng),對(duì)象是類(lèi)的實(shí)例。n類(lèi)的特征和行為分別命名為屬性和方類(lèi)的特征和行為分別命名為

3、屬性和方法法n類(lèi)是對(duì)象的模板,而對(duì)象是類(lèi)的實(shí)例;類(lèi)是對(duì)象的模板,而對(duì)象是類(lèi)的實(shí)例;n共性與個(gè)性的關(guān)系,是籠統(tǒng)與詳細(xì)的關(guān)系共性與個(gè)性的關(guān)系,是籠統(tǒng)與詳細(xì)的關(guān)系 。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮例如:電視機(jī)例如:電視機(jī)類(lèi)類(lèi)n 屬性:尺寸屬性:尺寸n 顏色顏色n 型號(hào)型號(hào)n 方法:翻開(kāi)方法:翻開(kāi)n 封鎖封鎖n 選擇節(jié)目選擇節(jié)目面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?.1面向?qū)ο蟮乃枷朊嫦驅(qū)ο蟮乃枷雗一個(gè)類(lèi)中定義的方法可被該類(lèi)的對(duì)象調(diào)用,一個(gè)類(lèi)中定義的方法可被該類(lèi)的對(duì)象調(diào)用,對(duì)象方法的每一調(diào)用被稱(chēng)作發(fā)送一個(gè)音訊對(duì)象方法的每一調(diào)用被稱(chēng)作發(fā)送一個(gè)音訊message給對(duì)象給對(duì)象 。n對(duì)象間是相互獨(dú)立,經(jīng)過(guò)發(fā)送音訊相互影響。對(duì)

4、象間是相互獨(dú)立,經(jīng)過(guò)發(fā)送音訊相互影響。一個(gè)音訊由三部分組成:一個(gè)音訊由三部分組成:n(1) 音訊目的對(duì)象;音訊目的對(duì)象;n(2) 執(zhí)行方法的名字;執(zhí)行方法的名字;n(3) 執(zhí)行方法所需求的參數(shù)執(zhí)行方法所需求的參數(shù)parameters。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮封裝性封裝性n封裝性就是把對(duì)象的屬性和方法結(jié)合成一個(gè)獨(dú)立封裝性就是把對(duì)象的屬性和方法結(jié)合成一個(gè)獨(dú)立的一樣單位,并盡能夠隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。對(duì)的一樣單位,并盡能夠隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。對(duì)外構(gòu)成一個(gè)邊境或者說(shuō)構(gòu)成一道屏障,只保外構(gòu)成一個(gè)邊境或者說(shuō)構(gòu)成一道屏障,只保管有限的對(duì)外接口使之與外部發(fā)生聯(lián)絡(luò)。管有限的對(duì)外接口使之與外部發(fā)生聯(lián)絡(luò)。n承繼性承

5、繼性n特殊類(lèi)的對(duì)象擁有其普通類(lèi)的全部屬性與方法,特殊類(lèi)的對(duì)象擁有其普通類(lèi)的全部屬性與方法,稱(chēng)作特殊類(lèi)對(duì)普通類(lèi)的承繼稱(chēng)作特殊類(lèi)對(duì)普通類(lèi)的承繼 .普通類(lèi)為父類(lèi)普通類(lèi)為父類(lèi)superclass,超類(lèi),特殊類(lèi)為子類(lèi)超類(lèi),特殊類(lèi)為子類(lèi)(subclass)。n多態(tài)性多態(tài)性n對(duì)象的多態(tài)性是指在普通類(lèi)中定義的屬性或方法對(duì)象的多態(tài)性是指在普通類(lèi)中定義的屬性或方法被特殊類(lèi)承繼之后,可以具有不同的數(shù)據(jù)類(lèi)型或被特殊類(lèi)承繼之后,可以具有不同的數(shù)據(jù)類(lèi)型或表現(xiàn)出不同的行為。表現(xiàn)出不同的行為。 面向?qū)ο蟮奶攸c(diǎn)面向?qū)ο蟮奶攸c(diǎn) 面向?qū)ο笕髾C(jī)制:面向?qū)ο笕髾C(jī)制:封裝:隱藏內(nèi)部實(shí)現(xiàn)封裝:隱藏內(nèi)部實(shí)現(xiàn)承繼:復(fù)用現(xiàn)有代碼承繼:復(fù)用現(xiàn)

6、有代碼多態(tài):改寫(xiě)對(duì)象行為多態(tài):改寫(xiě)對(duì)象行為面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?.2類(lèi)類(lèi)n類(lèi)由數(shù)據(jù)成員和方法組成。類(lèi)封裝了一類(lèi)對(duì)象的形類(lèi)由數(shù)據(jù)成員和方法組成。類(lèi)封裝了一類(lèi)對(duì)象的形狀和方法狀和方法 。 汽車(chē)汽車(chē)(類(lèi)類(lèi))品牌品牌型號(hào)型號(hào)顏色顏色-加速與減速設(shè)計(jì)加速與減速設(shè)計(jì)轉(zhuǎn)向設(shè)計(jì)轉(zhuǎn)向設(shè)計(jì)剎車(chē)設(shè)計(jì)剎車(chē)設(shè)計(jì)面向?qū)ο缶幊堂嫦驅(qū)ο缶幊填?lèi)的聲明類(lèi)的聲明類(lèi)的修飾符用于闡明類(lèi)的特征和訪問(wèn)權(quán)限,包括類(lèi)的修飾符用于闡明類(lèi)的特征和訪問(wèn)權(quán)限,包括public,abstract,final,friendly。public:表示此類(lèi)為表示此類(lèi)為“公共類(lèi)公共類(lèi) ; abstract:表示此類(lèi)為:表示此類(lèi)為“籠統(tǒng)類(lèi)籠統(tǒng)類(lèi) ; final

7、:表示此類(lèi)為:表示此類(lèi)為“最終類(lèi)最終類(lèi) .類(lèi)名是類(lèi)名是Java標(biāo)識(shí)符。通常,類(lèi)名的第一個(gè)字母為大標(biāo)識(shí)符。通常,類(lèi)名的第一個(gè)字母為大寫(xiě)。寫(xiě)。 類(lèi)的修飾符類(lèi)的修飾符classclass類(lèi)名類(lèi)名extends extends 父類(lèi)名父類(lèi)名 implements implements ,接口名接口名 成員變量;成員變量; 成員方法;成員方法;( (簡(jiǎn)稱(chēng)方法簡(jiǎn)稱(chēng)方法) ) 類(lèi)聲明類(lèi)聲明類(lèi)體類(lèi)體系統(tǒng)定義類(lèi)系統(tǒng)定義類(lèi)(系統(tǒng)提供的類(lèi)系統(tǒng)提供的類(lèi)):曾經(jīng)定義好的類(lèi),可直接運(yùn)用。:曾經(jīng)定義好的類(lèi),可直接運(yùn)用。用戶(hù)定義類(lèi)用戶(hù)定義類(lèi)(用戶(hù)本人定義的類(lèi)用戶(hù)本人定義的類(lèi)):創(chuàng)建一個(gè)新類(lèi),即創(chuàng)建一個(gè)新:創(chuàng)建一個(gè)新類(lèi),即創(chuàng)建

8、一個(gè)新的數(shù)據(jù)類(lèi)型。的數(shù)據(jù)類(lèi)型。J a v a類(lèi)類(lèi)面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮一個(gè)一個(gè)Java程序可以定義很多個(gè)類(lèi),但只能有一個(gè)程序可以定義很多個(gè)類(lèi),但只能有一個(gè)public類(lèi),程序的主類(lèi)必需是類(lèi),程序的主類(lèi)必需是public類(lèi)。每個(gè)程序類(lèi)。每個(gè)程序都從主類(lèi)開(kāi)場(chǎng)執(zhí)行。都從主類(lèi)開(kāi)場(chǎng)執(zhí)行。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮class,extends,implements都是都是Java關(guān)鍵字。關(guān)鍵字。nclass闡明定義類(lèi)。闡明定義類(lèi)。nextends闡明目前定義的類(lèi)是父類(lèi)承繼而來(lái)的子闡明目前定義的類(lèi)是父類(lèi)承繼而來(lái)的子類(lèi),該父類(lèi)必需存在。類(lèi),該父類(lèi)必需存在。nimplements闡明類(lèi)要實(shí)現(xiàn)某個(gè)接口。各接口名

9、之闡明類(lèi)要實(shí)現(xiàn)某個(gè)接口。各接口名之間用逗號(hào)間用逗號(hào)“,分隔。,分隔。n類(lèi)體包含:實(shí)現(xiàn)類(lèi)功能的類(lèi)體包含:實(shí)現(xiàn)類(lèi)功能的Java言語(yǔ)程序代碼、成言語(yǔ)程序代碼、成員變量、成員方法。員變量、成員方法。n類(lèi)的成員變量定義類(lèi)的成員變量定義:n 修飾符修飾符 數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型 成員變量成員變量=初值初值; n成員變量的修飾符成員變量的修飾符 n訪問(wèn)控制修飾符訪問(wèn)控制修飾符public、protected、private; n存在修飾符存在修飾符static、abstract和和final。 類(lèi)的聲明類(lèi)的聲明面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮其中:其中:nfinal:表示該變量不能再被修正,稱(chēng)為常量。:表示該變量不能再

10、被修正,稱(chēng)為常量。n 例如:例如:final int a=3;nstatic:表示該變量時(shí)靜態(tài)變量,也稱(chēng)為類(lèi)變量。:表示該變量時(shí)靜態(tài)變量,也稱(chēng)為類(lèi)變量。屬于這個(gè)類(lèi)的一切對(duì)象的變量。而實(shí)例變量只屬于屬于這個(gè)類(lèi)的一切對(duì)象的變量。而實(shí)例變量只屬于某個(gè)對(duì)象。經(jīng)過(guò)某個(gè)對(duì)象。經(jīng)過(guò)“類(lèi)類(lèi).變量名和變量名和“對(duì)象對(duì)象.變量名援變量名援用。用。n默許修飾符,假設(shè)某個(gè)成員變量沒(méi)有設(shè)置訪問(wèn)權(quán)限,默許修飾符,假設(shè)某個(gè)成員變量沒(méi)有設(shè)置訪問(wèn)權(quán)限,允許類(lèi)本身以及在同一個(gè)包中的一切類(lèi)的變量訪問(wèn)。允許類(lèi)本身以及在同一個(gè)包中的一切類(lèi)的變量訪問(wèn)。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮class Examplennint i;nstatic i

11、nt j;npublic static void main(String args)nnExample a=new Example();na.j=3;nExample.j=2;na.i=4;nExample.i=5; nn面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮類(lèi)的成員方法類(lèi)的成員方法n 定義的普通方式為:定義的普通方式為:n 方法修飾符方法修飾符 n n 方法體方法體 n n成員方法修飾符成員方法修飾符 n 主要有主要有public、private、protected、final、static、abstract和和synchronized七種七種 。n成員方法的前往值類(lèi)型成員方法的前往值類(lèi)型 n方法前往值

12、用方法前往值用return語(yǔ)句來(lái)實(shí)現(xiàn),前往的數(shù)據(jù)類(lèi)型語(yǔ)句來(lái)實(shí)現(xiàn),前往的數(shù)據(jù)類(lèi)型必需與方法闡明中的方法前往值類(lèi)型一致必需與方法闡明中的方法前往值類(lèi)型一致 ; n假設(shè)不需求前往值,那么其前往值類(lèi)型被闡明為假設(shè)不需求前往值,那么其前往值類(lèi)型被闡明為void; 類(lèi)的聲明類(lèi)的聲明面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮final:為最終方法,不能在其所在類(lèi)的子類(lèi)中被重為最終方法,不能在其所在類(lèi)的子類(lèi)中被重載,只能被承繼,不能被重寫(xiě)。載,只能被承繼,不能被重寫(xiě)。nstatic:不需求初始化該方法所在的類(lèi)。也不能被它不需求初始化該方法所在的類(lèi)。也不能被它的子類(lèi)所重載。的子類(lèi)所重載。n 在一個(gè)在一個(gè)static方法中,只能

13、訪問(wèn)被定義為方法中,只能訪問(wèn)被定義為static的的類(lèi)變量和類(lèi)方法。類(lèi)變量和類(lèi)方法。nabstract:籠統(tǒng)方法,只需方法闡明,沒(méi)有方法體。籠統(tǒng)方法,只需方法闡明,沒(méi)有方法體。在它所在的類(lèi)的子類(lèi)中詳細(xì)實(shí)現(xiàn)?;\統(tǒng)方法所在的在它所在的類(lèi)的子類(lèi)中詳細(xì)實(shí)現(xiàn)?;\統(tǒng)方法所在的類(lèi)稱(chēng)為籠統(tǒng)類(lèi)。類(lèi)稱(chēng)為籠統(tǒng)類(lèi)。nsynchronized:同步方法,在多線(xiàn)程中運(yùn)用。同步方法,在多線(xiàn)程中運(yùn)用。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮方法名方法名n 成員方法名是成員方法名是Java言語(yǔ)合法的標(biāo)識(shí)符。言語(yǔ)合法的標(biāo)識(shí)符。n參數(shù)列表參數(shù)列表n 成員方法的參數(shù)列表是由逗號(hào)分隔的類(lèi)型及參數(shù)成員方法的參數(shù)列表是由逗號(hào)分隔的類(lèi)型及參數(shù)名組成,是可

14、選項(xiàng)。名組成,是可選項(xiàng)。n方法體方法體n 方法體是一個(gè)方法定義的主要部分,包含了一方法體是一個(gè)方法定義的主要部分,包含了一切實(shí)現(xiàn)方法功能的切實(shí)現(xiàn)方法功能的Java言語(yǔ)程序代碼,方法體用言語(yǔ)程序代碼,方法體用“ 括起來(lái)括起來(lái) 。n例例3-2 :源程序名為:源程序名為T(mén)estCir.java;定義一個(gè)方法,;定義一個(gè)方法,其功能是根據(jù)參數(shù)其功能是根據(jù)參數(shù)r的大小,前往圓的面積。的大小,前往圓的面積。 n 運(yùn)轉(zhuǎn)結(jié)果:運(yùn)轉(zhuǎn)結(jié)果:類(lèi)的聲明類(lèi)的聲明面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘰ublic class TestCir public static void main(String args) /main方法方法

15、double k; TestCir mj=new TestCir(); k=mj.area(5); System.out.println(k); public double area(int r) /定義定義area方法,帶有一個(gè)參數(shù)方法,帶有一個(gè)參數(shù)r final double PI=3.14; /定義常量定義常量PI為為3.14 return PI*r*r; /由由r的值,計(jì)算面積,前往面積值的值,計(jì)算面積,前往面積值 類(lèi)的聲明類(lèi)的聲明面向?qū)ο缶幊堂嫦驅(qū)ο缶幊坦こ塘x務(wù):n定義一個(gè)正方形,它的數(shù)據(jù)成員包括長(zhǎng)和寬,成員定義一個(gè)正方形,它的數(shù)據(jù)成員包括長(zhǎng)和寬,成員函數(shù)包括設(shè)置長(zhǎng)和寬的值,求長(zhǎng)方形

16、的面積。在主函數(shù)包括設(shè)置長(zhǎng)和寬的值,求長(zhǎng)方形的面積。在主方法中定義正方形對(duì)象,求長(zhǎng)是方法中定義正方形對(duì)象,求長(zhǎng)是5,寬是,寬是3的面積。的面積。然后再求長(zhǎng)是然后再求長(zhǎng)是8,寬是,寬是4的面積。的面積。n定義一個(gè)職員類(lèi)定義一個(gè)職員類(lèi)Emplyee姓名,年齡,性別,薪姓名,年齡,性別,薪水,一個(gè)顯示信息的方法,并輸出職員信息。水,一個(gè)顯示信息的方法,并輸出職員信息。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊虡?gòu)造方法構(gòu)造方法 構(gòu)造方法是一種特殊的方法,其稱(chēng)號(hào)與類(lèi)名一樣。構(gòu)造方法是一種特殊的方法,其稱(chēng)號(hào)與類(lèi)名一樣。Java言語(yǔ)中每個(gè)類(lèi)都有構(gòu)造方法言語(yǔ)中每個(gè)類(lèi)都有構(gòu)造方法 。構(gòu)造方法的特點(diǎn)構(gòu)造方法的特點(diǎn)構(gòu)造方法沒(méi)有前往值

17、類(lèi)型,沒(méi)有構(gòu)造方法沒(méi)有前往值類(lèi)型,沒(méi)有void。其修飾符只。其修飾符只能是訪問(wèn)控制修飾符,即能是訪問(wèn)控制修飾符,即public、private、protected中的任一個(gè)。中的任一個(gè)。構(gòu)造方法不能從父類(lèi)中承繼。構(gòu)造方法不能從父類(lèi)中承繼。構(gòu)造方法可以重載,一個(gè)類(lèi)可以有恣意多個(gè)構(gòu)造方構(gòu)造方法可以重載,一個(gè)類(lèi)可以有恣意多個(gè)構(gòu)造方法。不同的構(gòu)造方法根據(jù)參數(shù)的不同形狀來(lái)選擇法。不同的構(gòu)造方法根據(jù)參數(shù)的不同形狀來(lái)選擇適宜的構(gòu)造方法。適宜的構(gòu)造方法。構(gòu)造方法不能直接經(jīng)過(guò)方法名援用,必需經(jīng)過(guò)構(gòu)造方法不能直接經(jīng)過(guò)方法名援用,必需經(jīng)過(guò)new運(yùn)算符。運(yùn)算符。在構(gòu)造方法中調(diào)用當(dāng)前類(lèi)和其父類(lèi)的構(gòu)造方法,但在構(gòu)造方法中

18、調(diào)用當(dāng)前類(lèi)和其父類(lèi)的構(gòu)造方法,但必需在方法體的第一條語(yǔ)句。必需在方法體的第一條語(yǔ)句。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮在前一個(gè)義務(wù)的根底上,構(gòu)造在前一個(gè)義務(wù)的根底上,構(gòu)造3個(gè)構(gòu)造函數(shù)。個(gè)構(gòu)造函數(shù)。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘴his對(duì)象本身對(duì)象本身n表示對(duì)象本身表示對(duì)象本身n在不同方法中表示調(diào)用這個(gè)方法的對(duì)象在不同方法中表示調(diào)用這個(gè)方法的對(duì)象n在構(gòu)造方法中表示新創(chuàng)建的對(duì)象在構(gòu)造方法中表示新創(chuàng)建的對(duì)象n作用作用n運(yùn)用運(yùn)用this訪問(wèn)域及方法訪問(wèn)域及方法n運(yùn)用運(yùn)用this處理部分變量與成員變量同名處理部分變量與成員變量同名n在構(gòu)造方法中,用在構(gòu)造方法中,用this調(diào)用另一個(gè)構(gòu)造方法調(diào)用另一個(gè)構(gòu)造方法n 必需放

19、在第一句必需放在第一句n不能經(jīng)過(guò)不能經(jīng)過(guò)this援用類(lèi)變量、類(lèi)方法援用類(lèi)變量、類(lèi)方法面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘡lass Person String name; public void ex1(String name) /name=name; =name; public void ex2() ex1(“XMJ);/? this.ex1(“XMJ);/? /部分變量與成員變量同名部分變量與成員變量同名public class A public A(int i) public A(int i,int j) this(5);/第一句第一句 /調(diào)用另一個(gè)構(gòu)造方法調(diào)用另一個(gè)構(gòu)造方法面向?qū)?/p>

20、象編程面向?qū)ο缶幊蘳uper直接父類(lèi)直接父類(lèi)運(yùn)用運(yùn)用super訪問(wèn)父類(lèi)被子類(lèi)隱藏的同名的成員訪問(wèn)父類(lèi)被子類(lèi)隱藏的同名的成員運(yùn)用父類(lèi)的構(gòu)造方法運(yùn)用父類(lèi)的構(gòu)造方法super()必需放在第一句必需放在第一句class A int i; void value() i=10; System.out.println(i); class B extends A int i; void value() i=20;super.value(); System.out.println(i); System.out.println(super.i); 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮this與與super的區(qū)別的區(qū)別n t

21、his運(yùn)用當(dāng)前類(lèi)的構(gòu)造方法,運(yùn)用當(dāng)前類(lèi)的構(gòu)造方法,super運(yùn)用其父運(yùn)用其父類(lèi)的構(gòu)造方法。類(lèi)的構(gòu)造方法。nthis用以指代一個(gè)對(duì)象本身,它的作用主要是將用以指代一個(gè)對(duì)象本身,它的作用主要是將本人當(dāng)成對(duì)象作為參數(shù),傳送給別的對(duì)象中的本人當(dāng)成對(duì)象作為參數(shù),傳送給別的對(duì)象中的方法;方法;nsuper為了訪問(wèn)父類(lèi)的成員變量或方法,采用為了訪問(wèn)父類(lèi)的成員變量或方法,采用super加上點(diǎn)和成員變量或方法的方式。加上點(diǎn)和成員變量或方法的方式。構(gòu)造方法構(gòu)造方法面向?qū)ο缶幊堂嫦驅(qū)ο缶幊汤?-3:源程序名為:源程序名為Inheritance.java,是構(gòu)造方法的例子。,是構(gòu)造方法的例子。 /*定義一個(gè)父類(lèi)定義

22、一個(gè)父類(lèi)superclassname*/class superclassname int x;superclassname() /父類(lèi)無(wú)參數(shù)構(gòu)造方法父類(lèi)無(wú)參數(shù)構(gòu)造方法 x=3; System.out.println(在父類(lèi)中在父類(lèi)中x=+x); void dosomething() /父類(lèi)中成員方法父類(lèi)中成員方法 System.out.println(在父類(lèi)中在父類(lèi)中dosomething(); 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?*定義一個(gè)子類(lèi)定義一個(gè)子類(lèi)subclass,從,從superclassname承繼而來(lái)承繼而來(lái)*/ class subclass extends superclassname

23、 int x; subclass() super(); /調(diào)用父類(lèi)無(wú)參數(shù)構(gòu)造方法調(diào)用父類(lèi)無(wú)參數(shù)構(gòu)造方法 x=5; System.out.println(在子類(lèi)中在子類(lèi)中x=+x); void dosomething() /子類(lèi)中成員方法子類(lèi)中成員方法 super.dosomething(); /調(diào)用父類(lèi)中成員方法調(diào)用父類(lèi)中成員方法 dosomething() System.out.println(在子類(lèi)中在子類(lèi)中dosomething(); System.out.println(super.x=+super.x+ sub.x=+this.x); /*利用利用super援用父類(lèi)對(duì)象,利用援用父類(lèi)

24、對(duì)象,利用this援用當(dāng)前對(duì)象援用當(dāng)前對(duì)象*/ 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?/*定義主程序類(lèi)定義主程序類(lèi)inheritance*/ class Inheritance public static void main(String args) subclass subc=new subclass(); /調(diào)調(diào)用子類(lèi)構(gòu)造方法創(chuàng)建一個(gè)對(duì)象用子類(lèi)構(gòu)造方法創(chuàng)建一個(gè)對(duì)象subc subc.dosomething(); /調(diào)用子類(lèi)的成員方法調(diào)用子類(lèi)的成員方法 dosomething() 運(yùn)轉(zhuǎn)結(jié)果:運(yùn)轉(zhuǎn)結(jié)果:面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?.3對(duì)象對(duì)象 n對(duì)象的定義對(duì)象的定義n= new參數(shù)參數(shù)1,參數(shù),參數(shù)2,;n

25、或者:或者:n ;n = new 參數(shù)參數(shù)1,參數(shù),參數(shù)2,;n創(chuàng)建對(duì)象實(shí)踐執(zhí)行了三個(gè)操作:闡明對(duì)象、實(shí)例化創(chuàng)建對(duì)象實(shí)踐執(zhí)行了三個(gè)操作:闡明對(duì)象、實(shí)例化對(duì)象和初始化對(duì)象。對(duì)象和初始化對(duì)象。n闡明對(duì)象:就是給對(duì)象命名,也稱(chēng)定義一個(gè)實(shí)例變闡明對(duì)象:就是給對(duì)象命名,也稱(chēng)定義一個(gè)實(shí)例變量。量。n 普通方式為:普通方式為: ;n實(shí)例化對(duì)象:給對(duì)象分配存儲(chǔ)空間,用來(lái)保管對(duì)象實(shí)例化對(duì)象:給對(duì)象分配存儲(chǔ)空間,用來(lái)保管對(duì)象的數(shù)據(jù)和代碼。的數(shù)據(jù)和代碼。new運(yùn)算符用來(lái)實(shí)現(xiàn)對(duì)象的實(shí)例化。運(yùn)算符用來(lái)實(shí)現(xiàn)對(duì)象的實(shí)例化。n = new 參數(shù)參數(shù)1,參數(shù)參數(shù)2,;面向?qū)ο缶幊堂嫦驅(qū)ο缶幊虒?duì)象的運(yùn)用對(duì)象的運(yùn)用 n初始化對(duì)象經(jīng)

26、過(guò)調(diào)用該對(duì)象所在類(lèi)的構(gòu)造方法來(lái)實(shí)初始化對(duì)象經(jīng)過(guò)調(diào)用該對(duì)象所在類(lèi)的構(gòu)造方法來(lái)實(shí)現(xiàn)的。現(xiàn)的。n 援用對(duì)象的方法普通方式:援用對(duì)象的方法普通方式:n,;n例例3-4:程序:程序TwoArea.java,是援用對(duì)象的例子。,是援用對(duì)象的例子。 執(zhí)行結(jié)果:執(zhí)行結(jié)果:面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?*定義一個(gè)類(lèi)定義一個(gè)類(lèi)Point*/class Point public int x; /定義成員變量定義成員變量 public int y; /定義成員變量定義成員變量 public Point() /Point構(gòu)造方法,不帶參數(shù)構(gòu)造方法,不帶參數(shù) this.x=0; /援用當(dāng)前援用當(dāng)前x this.y=0; /援

27、用當(dāng)前援用當(dāng)前y public Point(int x,int y) /Point構(gòu)造方法,構(gòu)造方法,帶兩個(gè)參數(shù)帶兩個(gè)參數(shù) this.x=x; /援用當(dāng)前援用當(dāng)前x this.y=y; /援用當(dāng)前援用當(dāng)前y 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?*定義一個(gè)類(lèi)定義一個(gè)類(lèi)Graph*/class Graph public int width=0; /定義成員變量定義成員變量 public int height=0; /定義成員變量定義成員變量 public Point origin; /定義成員變量定義成員變量 public Graph() /Graph構(gòu)造方法構(gòu)造方法1,不帶參數(shù),不帶參數(shù) origin=n

28、ew Point(0,0); public Graph(Point p) /Graph構(gòu)造方法構(gòu)造方法2,帶一個(gè)參數(shù),帶一個(gè)參數(shù) origin=p; public Graph(Point p,int w,int h) /Graph構(gòu)造方法構(gòu)造方法3,帶三個(gè)參,帶三個(gè)參數(shù)數(shù) origin=p; width=w; height=h; 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘰ublic void move1(int x,int y) /成員方法成員方法move1 origin.x=x; origin.y=y; public void move2(int a,int b) /成員方法成員方法move2 origin

29、.x+=a; origin.y+=b; public int area() /成員方法成員方法area return width * height; 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘰ublic class TwoArea /*定義主程序類(lèi)定義主程序類(lèi)*/ public static void main(String args) int x=3,y=4; int w=4,h=5; Point p1=new Point(x,y); /將原點(diǎn)將原點(diǎn)p1定在定在(3,4)坐標(biāo)點(diǎn)坐標(biāo)點(diǎn) Point p2=new Point(6,8); /將原點(diǎn)將原點(diǎn)p2定在定在(6,8) 坐標(biāo)點(diǎn)坐標(biāo)點(diǎn) Graph r1=ne

30、w Graph(p1,w,h); Graph r2=new Graph(p2,8,10); r1.move1(4,6); /把矩形把矩形r1的原點(diǎn)移到的原點(diǎn)移到4,6 r2.move2(-2,4); /把矩形把矩形r2的原點(diǎn)的原點(diǎn)x坐標(biāo)減坐標(biāo)減2,y坐標(biāo)加坐標(biāo)加4 System.out.println(兩個(gè)矩形面積差兩個(gè)矩形面積差=+(r2.area() - r1.area(); /*調(diào)用成員方法計(jì)算矩形調(diào)用成員方法計(jì)算矩形r2與與r1面積差面積差*/ System.out.print(r1的原點(diǎn)為的原點(diǎn)為(+r1.origin.x+,); System.out.println(r1.orig

31、in.y+); System.out.print(r2的原點(diǎn)為的原點(diǎn)為(+r2.origin.x+,); System.out.println(r2.origin.y+); 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?.4承繼與多態(tài)承繼與多態(tài)n承繼性n子類(lèi)可以沿用父類(lèi)的某些特征。子類(lèi)也可以具有本人獨(dú)立的屬性和操作。n承繼分單承繼和多承繼。 圓圓矩形矩形幾何形狀幾何形狀兼 職 技 術(shù) 人 員銷(xiāo) 售 經(jīng) 理管 理 人 員銷(xiāo) 售 人 員雇 員面向?qū)ο缶幊堂嫦驅(qū)ο缶幊淌裁词浅欣^n在日常生活中,經(jīng)常遇到如下問(wèn)題。有一輛自行車(chē)在日常生活中,經(jīng)常遇到如下問(wèn)題。有一輛自行車(chē),自行車(chē)有顏色和型號(hào)大小之分,而公路賽車(chē)也有,自行車(chē)有

32、顏色和型號(hào)大小之分,而公路賽車(chē)也有顏色和型號(hào)大小之分,公路賽車(chē)多了一項(xiàng)速度的優(yōu)顏色和型號(hào)大小之分,公路賽車(chē)多了一項(xiàng)速度的優(yōu)勢(shì)。自行車(chē)有的東西公路賽車(chē)全都有,而公路賽車(chē)勢(shì)。自行車(chē)有的東西公路賽車(chē)全都有,而公路賽車(chē)有的東西自行車(chē)不一定有,它們一樣地方有很多。有的東西自行車(chē)不一定有,它們一樣地方有很多。在在JavaJava中,對(duì)于這種情況下就采用承繼來(lái)完成這個(gè)中,對(duì)于這種情況下就采用承繼來(lái)完成這個(gè)功能。功能。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?這是一個(gè)類(lèi),表述的是一個(gè)自行車(chē)這是一個(gè)類(lèi),表述的是一個(gè)自行車(chē) public class bikepublic class bike public String colo

33、r; public String color; /自行車(chē)的顏色自行車(chē)的顏色 public int size; public int size; /自行車(chē)的大小自行車(chē)的大小, ,即型號(hào)即型號(hào) /這是一個(gè)類(lèi),表述的是一個(gè)公路賽類(lèi)這是一個(gè)類(lèi),表述的是一個(gè)公路賽類(lèi)pubic class racing_cyclepubic class racing_cycle public String color; public String color; /自行車(chē)的顏色自行車(chē)的顏色public int size; public int size; /自行車(chē)的大小自行車(chē)的大小, ,即型號(hào)即型號(hào)public Strin

34、g speed; public String speed; /公路賽車(chē)的速度公路賽車(chē)的速度 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮/這是一個(gè)類(lèi),表述的是一個(gè)自行車(chē)這是一個(gè)類(lèi),表述的是一個(gè)自行車(chē)npublic class bikenn public String color;/自行車(chē)的顏色自行車(chē)的顏色n public int size; /自行車(chē)的大小,即型號(hào)自行車(chē)的大小,即型號(hào)nn/這是一個(gè)類(lèi),表述的是一個(gè)公路賽車(chē),它承繼于自行車(chē)這是一個(gè)類(lèi),表述的是一個(gè)公路賽車(chē),它承繼于自行車(chē)npubic class racing_cycle extends bikenn public String speed; /公路

35、賽車(chē)的速度公路賽車(chē)的速度n面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮在在Java中,被承繼的類(lèi)叫超類(lèi)中,被承繼的類(lèi)叫超類(lèi)superclass,承繼超類(lèi),承繼超類(lèi)的類(lèi)叫子類(lèi)的類(lèi)叫子類(lèi)subclass。因此,子類(lèi)是超類(lèi)的一個(gè)功能上。因此,子類(lèi)是超類(lèi)的一個(gè)功能上的擴(kuò)展,它承繼了超類(lèi)定義的一切屬性和方法,并且添加了的擴(kuò)展,它承繼了超類(lèi)定義的一切屬性和方法,并且添加了特有功能方法。特有功能方法。nJava是單承繼的,子類(lèi)可以有很多,父類(lèi)只能有一個(gè)。上面是單承繼的,子類(lèi)可以有很多,父類(lèi)只能有一個(gè)。上面的例子,假設(shè)加一個(gè)的例子,假設(shè)加一個(gè)Friend類(lèi),類(lèi),Son只能承繼自只能承繼自Father,要,要么承繼么承繼Frie

36、nd,不能同時(shí)承繼,不能同時(shí)承繼Father和和Friend。nJava的承繼是多層承繼的,是一個(gè)類(lèi)可以有很多子類(lèi),而子的承繼是多層承繼的,是一個(gè)類(lèi)可以有很多子類(lèi),而子類(lèi)下面又可以有很多子類(lèi)。類(lèi)下面又可以有很多子類(lèi)。n父類(lèi)沒(méi)有定義一個(gè)無(wú)參的構(gòu)造器,那么編譯器就默許生成一父類(lèi)沒(méi)有定義一個(gè)無(wú)參的構(gòu)造器,那么編譯器就默許生成一個(gè)無(wú)參的構(gòu)造器,也可以在子類(lèi)構(gòu)造器里顯示運(yùn)用個(gè)無(wú)參的構(gòu)造器,也可以在子類(lèi)構(gòu)造器里顯示運(yùn)用super方方法調(diào)用父類(lèi)構(gòu)造器,法調(diào)用父類(lèi)構(gòu)造器,super方法里寫(xiě)幾個(gè)參數(shù)就可以表示調(diào)方法里寫(xiě)幾個(gè)參數(shù)就可以表示調(diào)用的是父類(lèi)的哪一個(gè)構(gòu)造器。用的是父類(lèi)的哪一個(gè)構(gòu)造器。面向?qū)ο缶幊堂嫦驅(qū)ο缶?/p>

37、程n當(dāng)父類(lèi)中沒(méi)有構(gòu)造方法或只需不帶參數(shù)的構(gòu)造方法當(dāng)父類(lèi)中沒(méi)有構(gòu)造方法或只需不帶參數(shù)的構(gòu)造方法時(shí),系統(tǒng)會(huì)在子類(lèi)構(gòu)造器自動(dòng)加上時(shí),系統(tǒng)會(huì)在子類(lèi)構(gòu)造器自動(dòng)加上super語(yǔ)句,可語(yǔ)句,可以不顯式地添加對(duì)父類(lèi)構(gòu)造器方法的調(diào)用,但假設(shè)以不顯式地添加對(duì)父類(lèi)構(gòu)造器方法的調(diào)用,但假設(shè)父類(lèi)中有帶參數(shù)的構(gòu)造器方法,那么,必需顯式在父類(lèi)中有帶參數(shù)的構(gòu)造器方法,那么,必需顯式在構(gòu)造器中運(yùn)用構(gòu)造器中運(yùn)用super調(diào)用父類(lèi)的帶參數(shù)的構(gòu)造器方調(diào)用父類(lèi)的帶參數(shù)的構(gòu)造器方法,否那么編譯出錯(cuò)。法,否那么編譯出錯(cuò)。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊坛欣^性承繼性n承繼的目的:實(shí)現(xiàn)代碼重用。承繼的目的:實(shí)現(xiàn)代碼重用。n子類(lèi)不能承繼父類(lèi)中訪問(wèn)權(quán)限為

38、子類(lèi)不能承繼父類(lèi)中訪問(wèn)權(quán)限為private的成員變量的成員變量和方法。和方法。n子類(lèi)可以承繼父類(lèi)方法和成員變量,但它不能承繼構(gòu)子類(lèi)可以承繼父類(lèi)方法和成員變量,但它不能承繼構(gòu)造方法。造方法。n創(chuàng)建子類(lèi)格式:創(chuàng)建子類(lèi)格式: Public class SubClass extends SuperClass 訪問(wèn)權(quán)限訪問(wèn)權(quán)限 class class 類(lèi)名類(lèi)名 extends extends 父類(lèi)父類(lèi) 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊汤?-5:源程序名:源程序名Car Demo .java,是類(lèi)的承繼。,是類(lèi)的承繼。 class Car int car_number; void set_number(int

39、car_num) car_number=car_num; void show_number() System.out.println (My car No. is :+car_number); 承繼性承繼性面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘡lass Bus extends Car int capacity; void set_capacity(int bus_car_capacity) capacity=bus_car_capacity; void show_capacity() System.out.println(My capacity is: + capacity); 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘡

40、lass CarDemo public static void main(String args) Bus DemoBus = new Bus(); DemoBus.set_number(6868); DemoBus.show_number(); DemoBus.set_capacity(30); DemoBus.show_capacity(); 運(yùn)轉(zhuǎn)結(jié)果:運(yùn)轉(zhuǎn)結(jié)果:承繼性承繼性面向?qū)ο缶幊堂嫦驅(qū)ο缶幊坦こ塘x務(wù): 點(diǎn)類(lèi)點(diǎn)類(lèi) x坐標(biāo)和坐標(biāo)和y坐標(biāo)坐標(biāo)方法(獲取x和y的坐標(biāo)) 圓類(lèi)圓類(lèi) x坐標(biāo)和坐標(biāo)和y坐標(biāo),半徑坐標(biāo),半徑r方法(獲取r)和(獲取面積) 圓柱類(lèi)圓柱類(lèi) x坐標(biāo)和坐標(biāo)和y坐標(biāo),半徑坐標(biāo)

41、,半徑r,高,高h(yuǎn)方法(獲取h)和(計(jì)算體積)面向?qū)ο缶幊堂嫦驅(qū)ο缶幊潭鄳B(tài)性多態(tài)性n多態(tài)性表達(dá)在兩個(gè)方面:由方法重載實(shí)現(xiàn)的靜態(tài)多態(tài)多態(tài)性表達(dá)在兩個(gè)方面:由方法重載實(shí)現(xiàn)的靜態(tài)多態(tài)性編譯時(shí)多態(tài)和方法重寫(xiě)實(shí)現(xiàn)的動(dòng)態(tài)多態(tài)性運(yùn)性編譯時(shí)多態(tài)和方法重寫(xiě)實(shí)現(xiàn)的動(dòng)態(tài)多態(tài)性運(yùn)轉(zhuǎn)時(shí)多態(tài)。轉(zhuǎn)時(shí)多態(tài)。 n方法重寫(xiě):指方法的含義被重寫(xiě)后替代方法重寫(xiě):指方法的含義被重寫(xiě)后替代 。n子類(lèi)經(jīng)過(guò)隱藏父類(lèi)的成員變量和重寫(xiě)父類(lèi)的方法,可子類(lèi)經(jīng)過(guò)隱藏父類(lèi)的成員變量和重寫(xiě)父類(lèi)的方法,可以把父類(lèi)的形狀和行為改動(dòng)為本身的形狀和行為。以把父類(lèi)的形狀和行為改動(dòng)為本身的形狀和行為。n子類(lèi)中重寫(xiě)的方法和父類(lèi)中被重寫(xiě)的方法要具有一樣子類(lèi)中重寫(xiě)的方法和

42、父類(lèi)中被重寫(xiě)的方法要具有一樣的名字,一樣的參數(shù)表和一樣的前往類(lèi)型,只是函數(shù)的名字,一樣的參數(shù)表和一樣的前往類(lèi)型,只是函數(shù)體不同。體不同。n方法重寫(xiě)時(shí)應(yīng)遵照的原那么:方法重寫(xiě)時(shí)應(yīng)遵照的原那么:n改寫(xiě)后的方法不能比被重寫(xiě)的方法有更嚴(yán)厲的訪問(wèn)權(quán)改寫(xiě)后的方法不能比被重寫(xiě)的方法有更嚴(yán)厲的訪問(wèn)權(quán)限可以一樣。改寫(xiě)后的方法不能比重寫(xiě)的方法產(chǎn)限可以一樣。改寫(xiě)后的方法不能比重寫(xiě)的方法產(chǎn)生更多的例外。生更多的例外。 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮自行車(chē)的挪動(dòng)和公路賽車(chē)的挪動(dòng)都是靠外力來(lái)挪動(dòng)自行車(chē)的挪動(dòng)和公路賽車(chē)的挪動(dòng)都是靠外力來(lái)挪動(dòng),二者是一樣的。公路賽車(chē)承繼了這一特點(diǎn),但公,二者是一樣的。公路賽車(chē)承繼了這一特點(diǎn),但公

43、路賽車(chē)的挪動(dòng)速度就不一樣了,挪動(dòng)的快慢就是由路賽車(chē)的挪動(dòng)速度就不一樣了,挪動(dòng)的快慢就是由它們各自挪動(dòng)特性不一樣決議的,它們各自挪動(dòng)特性不一樣決議的,面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮class bikenn/自行車(chē)的挪動(dòng)速度自行車(chē)的挪動(dòng)速度npublic void move()nnSystem.out.println(速度慢的速度慢的!);nn面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮public class racing_cycle extends biken/公路賽車(chē)的挪動(dòng)速度公路賽車(chē)的挪動(dòng)速度npublic void move()nnSystem.out.println(速度快的速度快的!);nn面向?qū)ο缶幊堂?/p>

44、向?qū)ο缶幊蘮public static void main(String args)nnracing_cycle rc = new racing_cycle(); /創(chuàng)建了一個(gè)公路賽車(chē)的對(duì)象創(chuàng)建了一個(gè)公路賽車(chē)的對(duì)象,對(duì)象援用為對(duì)象援用為rcnrc.move(); /執(zhí)行了執(zhí)行了move()方法方法nn面向?qū)ο缶幊堂嫦驅(qū)ο缶幊汤?-6:源程序名:源程序名Rewritex.java,,是方法的重寫(xiě)的,是方法的重寫(xiě)的例子。例子。 class SuperClass int x; void setF( ) x=0; System.out.println(Super的變量的變量x的值的值+x); 面向?qū)?/p>

45、象編程面向?qū)ο缶幊蘶oid setF( ) /重寫(xiě)了父類(lèi)的方法重寫(xiě)了父類(lèi)的方法 setF() x =6; System.out.println(Son的變量的變量x的值的值+x); class SubClass extends SuperClass int x;/隱藏了父類(lèi)的變量隱藏了父類(lèi)的變量x多態(tài)性多態(tài)性面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘡lass Rewritex public static void main(String args) SubClass Son = new SubClass (); Son.setF(); SuperClass Father= new SubClass (); F

46、ather.setF(); 運(yùn)轉(zhuǎn)結(jié)果:運(yùn)轉(zhuǎn)結(jié)果:多態(tài)性多態(tài)性面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮方法重載方法重載n方法重載是指同樣方法在不同的地方具有不同的方法重載是指同樣方法在不同的地方具有不同的含義。含義。n方法重載使一個(gè)類(lèi)中可以有多個(gè)一樣名字的方法。方法重載使一個(gè)類(lèi)中可以有多個(gè)一樣名字的方法。編譯器根據(jù)參數(shù)的不同來(lái)靜態(tài)確定調(diào)用相應(yīng)的方編譯器根據(jù)參數(shù)的不同來(lái)靜態(tài)確定調(diào)用相應(yīng)的方法。法。n方法重載中這些方法的參數(shù)必需不同,或是參數(shù)方法重載中這些方法的參數(shù)必需不同,或是參數(shù)的數(shù)量不同,或是參數(shù)的類(lèi)型不同。的數(shù)量不同,或是參數(shù)的類(lèi)型不同。n例例3-8:源程序名源程序名TestLoad.java,方法重載的

47、例,方法重載的例子。子。 多態(tài)性多態(tài)性/*定義一個(gè)方法重載的類(lèi)定義一個(gè)方法重載的類(lèi)*/class Load void receive(int i) / receive方法,帶有方法,帶有int類(lèi)型參數(shù)類(lèi)型參數(shù)1個(gè)個(gè) System.out.print(Receive one data!:); System.out.println(i=+i); 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?void receive(int x,int y) / receive方法,帶有方法,帶有int類(lèi)型參數(shù)類(lèi)型參數(shù)2個(gè)個(gè) System.out.print(Receive two datas!:); System.out.print

48、ln(x=+x+,y=+y); void receive(double d) / receive方法,帶有方法,帶有double類(lèi)型參數(shù)類(lèi)型參數(shù)1個(gè)個(gè) System.out.print(Receive one double data!:); System.out.println(d=+d); void receive(String s) / receive方法,帶有方法,帶有string類(lèi)型參數(shù)類(lèi)型參數(shù)1個(gè)個(gè) System.out.print(Receive a sting!:); System.out.println(s=+s); 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?*主程序類(lèi)主程序類(lèi)*/ publi

49、c class TestLoad public static void main(String args) Load mo=new Load (); /創(chuàng)建對(duì)象創(chuàng)建對(duì)象mo mo.receive(1); /調(diào)用調(diào)用receive方法,帶方法,帶int類(lèi)型參數(shù)類(lèi)型參數(shù)1個(gè)個(gè) mo.receive(2,3); /調(diào)用調(diào)用receive方法,帶方法,帶int類(lèi)型參數(shù)類(lèi)型參數(shù)2個(gè)個(gè) mo.receive(3.14159); /調(diào)用調(diào)用receive方法,帶方法,帶double類(lèi)型參數(shù)類(lèi)型參數(shù)1個(gè)個(gè) mo.receive(It is a Test!); /調(diào)用調(diào)用receive方法,帶方法,帶strin

50、g型參數(shù)型參數(shù)1個(gè)個(gè) 運(yùn)轉(zhuǎn)結(jié)果:運(yùn)轉(zhuǎn)結(jié)果:面向?qū)ο缶幊堂嫦驅(qū)ο缶幊坦こ塘x務(wù)n設(shè)計(jì)一個(gè)設(shè)計(jì)一個(gè)math類(lèi),經(jīng)過(guò)它可以實(shí)現(xiàn)整數(shù)的加法運(yùn)類(lèi),經(jīng)過(guò)它可以實(shí)現(xiàn)整數(shù)的加法運(yùn)算和實(shí)數(shù)的加法運(yùn)算。算和實(shí)數(shù)的加法運(yùn)算。n設(shè)計(jì)一個(gè)設(shè)計(jì)一個(gè)employee類(lèi),包括數(shù)據(jù)成員姓名,年類(lèi),包括數(shù)據(jù)成員姓名,年齡,工號(hào),工資,構(gòu)造方法,齡,工號(hào),工資,構(gòu)造方法,addsalary方法添方法添加工資加薪加工資加薪10%,list顯示信息。再設(shè)計(jì)一個(gè)顯示信息。再設(shè)計(jì)一個(gè)manager類(lèi),添加數(shù)據(jù)成員類(lèi),添加數(shù)據(jù)成員position,改寫(xiě),改寫(xiě)addsalary方法添加工資加薪方法添加工資加薪20%。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?.

51、5籠統(tǒng)類(lèi)和接口籠統(tǒng)類(lèi)和接口n籠統(tǒng)類(lèi)見(jiàn)籠統(tǒng)類(lèi)見(jiàn)Animal.java)n只給出籠統(tǒng)構(gòu)造,不給出每個(gè)成員函數(shù)的完好實(shí)只給出籠統(tǒng)構(gòu)造,不給出每個(gè)成員函數(shù)的完好實(shí)現(xiàn)的類(lèi)。現(xiàn)的類(lèi)。n籠統(tǒng)方法:是指該方法只需方法闡明卻沒(méi)有方法籠統(tǒng)方法:是指該方法只需方法闡明卻沒(méi)有方法體。體。n用用abstract 關(guān)鍵字來(lái)修飾一個(gè)籠統(tǒng)類(lèi),用關(guān)鍵字來(lái)修飾一個(gè)籠統(tǒng)類(lèi),用abstract 關(guān)鍵字來(lái)修飾一個(gè)籠統(tǒng)方法。關(guān)鍵字來(lái)修飾一個(gè)籠統(tǒng)方法。n籠統(tǒng)類(lèi)必需被承繼,籠統(tǒng)方法必需被重寫(xiě)?;\統(tǒng)類(lèi)必需被承繼,籠統(tǒng)方法必需被重寫(xiě)。 n例例3-9源程序源程序Abstract.java,一個(gè)帶有籠統(tǒng)成員,一個(gè)帶有籠統(tǒng)成員函數(shù)的類(lèi)。函數(shù)的類(lèi)。 n

52、 abstract class A n n abstract void callme( );n void me( ) n n System.out.println(在在A的的me成員函數(shù)成員函數(shù)里里);n n 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊袒\統(tǒng)類(lèi)籠統(tǒng)類(lèi)class B extends A void callme( ) System.out.println(在在B的的callme成員函數(shù)里成員函數(shù)里); public class Abstract public static void main(String args) A a = new B( ); a.callme( ); a.me ( ); 運(yùn)轉(zhuǎn)結(jié)

53、果:運(yùn)轉(zhuǎn)結(jié)果:面向?qū)ο缶幊堂嫦驅(qū)ο缶幊袒\統(tǒng)類(lèi)籠統(tǒng)類(lèi)用關(guān)鍵字用關(guān)鍵字abstract修飾的類(lèi)稱(chēng)為籠統(tǒng)類(lèi)修飾的類(lèi)稱(chēng)為籠統(tǒng)類(lèi) abstract class A /類(lèi)類(lèi)A為籠統(tǒng)類(lèi)為籠統(tǒng)類(lèi) 不能直接被實(shí)例化不能直接被實(shí)例化,因此普通作為其它類(lèi)的父類(lèi)因此普通作為其它類(lèi)的父類(lèi),定義目的是提供可由其子類(lèi)共享的普通方式。定義目的是提供可由其子類(lèi)共享的普通方式?;\統(tǒng)類(lèi)需求承繼籠統(tǒng)類(lèi)需求承繼,子類(lèi)根據(jù)本身需求擴(kuò)展籠統(tǒng)類(lèi)。子類(lèi)根據(jù)本身需求擴(kuò)展籠統(tǒng)類(lèi)。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊袒\統(tǒng)類(lèi)籠統(tǒng)類(lèi)用關(guān)鍵字用關(guān)鍵字abstract修飾的方法稱(chēng)為籠統(tǒng)方法修飾的方法稱(chēng)為籠統(tǒng)方法abstract class A abstract int

54、 aa(int x,int y);/方法方法aa為籠統(tǒng)方法為籠統(tǒng)方法 籠統(tǒng)類(lèi)中可以沒(méi)有籠統(tǒng)方法或某個(gè)方法不是籠統(tǒng)類(lèi)中可以沒(méi)有籠統(tǒng)方法或某個(gè)方法不是籠統(tǒng)方法籠統(tǒng)方法,有籠統(tǒng)方法的類(lèi)一定是籠統(tǒng)類(lèi)有籠統(tǒng)方法的類(lèi)一定是籠統(tǒng)類(lèi)籠統(tǒng)籠統(tǒng)方法只能位于籠統(tǒng)類(lèi)方法只能位于籠統(tǒng)類(lèi)。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊探涌诮涌趎Shape.javanJava言語(yǔ)不支持多承繼性,即一個(gè)子類(lèi)只能有一個(gè)言語(yǔ)不支持多承繼性,即一個(gè)子類(lèi)只能有一個(gè)n 父類(lèi),但有時(shí)子類(lèi)需求承繼多個(gè)父類(lèi)的特性,因此,父類(lèi),但有時(shí)子類(lèi)需求承繼多個(gè)父類(lèi)的特性,因此,n 引入了接口。引入了接口。n接口接口(Interface),是一些籠統(tǒng)方法和常量的集合。,是一些

55、籠統(tǒng)方法和常量的集合。n接口的定義接口的定義n運(yùn)用關(guān)鍵字運(yùn)用關(guān)鍵字interface。n接口定義的普通方式為:接口定義的普通方式為:接口修飾符接口修飾符 interface extends 接口體接口體 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮public abstract class aaan/籠統(tǒng)類(lèi)里的籠統(tǒng)方法籠統(tǒng)類(lèi)里的籠統(tǒng)方法nabstract public void show();n/籠統(tǒng)類(lèi)里的方法籠統(tǒng)類(lèi)里的方法npublic int getMax()nn/定義定義int類(lèi)型的私有變量類(lèi)型的私有變量inint i = 123;nn/將變量將變量i前往出去并退出方法前往出去并退出方法nreturn i

56、;nn面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮public class test extends aaann public static void main(String args)n n test t=new test();n t.show();n n public void show()n n System.out.println(“實(shí)現(xiàn)了籠統(tǒng)類(lèi)中的方法實(shí)現(xiàn)了籠統(tǒng)類(lèi)中的方法);n n面向?qū)ο缶幊堂嫦驅(qū)ο缶幊探涌趎首先來(lái)舉一個(gè)例子,汽車(chē)的挪動(dòng)就好比一個(gè)接口,首先來(lái)舉一個(gè)例子,汽車(chē)的挪動(dòng)就好比一個(gè)接口,在以后消費(fèi)的汽車(chē)中都遵照這個(gè)接口進(jìn)展制造。而在以后消費(fèi)的汽車(chē)中都遵照這個(gè)接口進(jìn)展制造。而接口中只定義了汽車(chē)

57、挪動(dòng)的方式,沒(méi)有詳細(xì)的去定接口中只定義了汽車(chē)挪動(dòng)的方式,沒(méi)有詳細(xì)的去定義是怎樣進(jìn)展挪動(dòng)的,所以接口就好比是一個(gè)規(guī)定義是怎樣進(jìn)展挪動(dòng)的,所以接口就好比是一個(gè)規(guī)定。n接口修飾符接口修飾符 interface interface 接口稱(chēng)號(hào)接口稱(chēng)號(hào)n n/成員變量和方法的聲明成員變量和方法的聲明n 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊蘮接口修飾符和類(lèi)的修飾符是一樣的。接口修飾符和類(lèi)的修飾符是一樣的。ninterfaceinterface是定義接口的關(guān)鍵字。是定義接口的關(guān)鍵字。n接口里的成員變量默以為接口里的成員變量默以為public static finalpublic static final類(lèi)類(lèi)型的型的n接口

58、不能聲明為接口不能聲明為finalfinal的,由于的,由于finalfinal類(lèi)型的必需求類(lèi)型的必需求實(shí)現(xiàn)。實(shí)現(xiàn)。n接口就是一個(gè)特殊的籠統(tǒng)類(lèi),籠統(tǒng)類(lèi)里有籠統(tǒng)的方接口就是一個(gè)特殊的籠統(tǒng)類(lèi),籠統(tǒng)類(lèi)里有籠統(tǒng)的方法和普通的方法,而接口里方法全為籠統(tǒng)的,需求法和普通的方法,而接口里方法全為籠統(tǒng)的,需求在其子類(lèi)進(jìn)展詳細(xì)的方法實(shí)現(xiàn)。類(lèi)就是一個(gè)產(chǎn)品的在其子類(lèi)進(jìn)展詳細(xì)的方法實(shí)現(xiàn)。類(lèi)就是一個(gè)產(chǎn)品的詳細(xì)功能闡明,而接口就是這些功能的簡(jiǎn)要闡明。詳細(xì)功能闡明,而接口就是這些功能的簡(jiǎn)要闡明。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊探涌诮涌趎 假設(shè)一個(gè)籠統(tǒng)類(lèi)中的一切方法都是籠統(tǒng)的假設(shè)一個(gè)籠統(tǒng)類(lèi)中的一切方法都是籠統(tǒng)的,就可以就可以將這個(gè)類(lèi)

59、用另外一種方式來(lái)定義將這個(gè)類(lèi)用另外一種方式來(lái)定義,也就是接口定義。也就是接口定義。n 接口是籠統(tǒng)方法和常量值的定義的集合接口是籠統(tǒng)方法和常量值的定義的集合,從本質(zhì)上從本質(zhì)上講,接口是一種特殊的籠統(tǒng)類(lèi)講,接口是一種特殊的籠統(tǒng)類(lèi),這種籠統(tǒng)類(lèi)中只包含這種籠統(tǒng)類(lèi)中只包含常量和方法的定義常量和方法的定義,而沒(méi)有變量和方法的實(shí)現(xiàn)。而沒(méi)有變量和方法的實(shí)現(xiàn)。 可以運(yùn)用可以運(yùn)用extends來(lái)承繼接口的常量和籠統(tǒng)方法,但它與類(lèi)來(lái)承繼接口的常量和籠統(tǒng)方法,但它與類(lèi)中的中的extends不同,它可以承繼有多個(gè)父接口不同,它可以承繼有多個(gè)父接口(多重承繼多重承繼),各,各父接口間用逗號(hào)隔開(kāi)。父接口間用逗號(hào)隔開(kāi)。 接口

60、中的一切常量必需是接口中的一切常量必需是public static final,方法必需是,方法必需是public abstract,這是系統(tǒng)默許的,不論他在定義接口時(shí),寫(xiě),這是系統(tǒng)默許的,不論他在定義接口時(shí),寫(xiě)不寫(xiě)修飾符都是一樣的。不寫(xiě)修飾符都是一樣的。面向?qū)ο缶幊堂嫦驅(qū)ο缶幊探涌诘亩x接口的定義n接口修飾符接口修飾符n接口修飾符為接口訪問(wèn)權(quán)限,有接口修飾符為接口訪問(wèn)權(quán)限,有public和缺省兩種和缺省兩種形狀。形狀。npublic形狀形狀 :用:用public指明恣意類(lèi)均可以運(yùn)用這個(gè)指明恣意類(lèi)均可以運(yùn)用這個(gè)接口。接口。n缺省形狀:缺省形狀: 在缺省情況下,只需與該接口定義在在缺省情況下,只

溫馨提示

  • 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)論