資源描述:
《java中的類(lèi)與接口》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第三章Java中的類(lèi)與接口教授:郭磊【本章導(dǎo)讀】Java語(yǔ)言其中一個(gè)突出特點(diǎn)就是面向?qū)ο?。所謂面向?qū)ο蟮姆椒▽W(xué),就是使我們分析、設(shè)計(jì)和實(shí)現(xiàn)一個(gè)系統(tǒng)的方法盡可能地接近我們認(rèn)識(shí)一個(gè)系統(tǒng)的方法。包括:面向?qū)ο蟮姆治觯∣OA,Object-OrientedAnalysis),面向?qū)ο蟮脑O(shè)計(jì)(OOD,Object-OrientedDesign),面向?qū)ο蟮某绦蛟O(shè)計(jì)(OOP,Object-OrientedProgram)。本章主要介紹面向?qū)ο蟮幕靖拍?,包括?lèi)與對(duì)象、抽象類(lèi)、內(nèi)部類(lèi)、匿名類(lèi)、接口和包等。目的是為以后的Jav
2、a面向?qū)ο蟮木幊檀蚝没A(chǔ)。【本章要點(diǎn)】類(lèi)與對(duì)象抽象類(lèi)內(nèi)部類(lèi)匿名類(lèi)接口包3.1類(lèi)與對(duì)象3.1.1類(lèi)的聲明1、類(lèi)的聲明格式:<類(lèi)首聲明>{<類(lèi)主體>}類(lèi)首聲明定義類(lèi)的名字、訪(fǎng)問(wèn)權(quán)限以及與其它類(lèi)的關(guān)系等。類(lèi)主體定義類(lèi)的成員,包括變量(數(shù)據(jù))和方法(行為)3.1類(lèi)與對(duì)象3.1.2類(lèi)首聲明:[<修飾符>]class<類(lèi)名>[extends<超類(lèi)名>][implements<接口名>]class:類(lèi)定義的關(guān)鍵字;extends:表示類(lèi)和另外一些類(lèi)(超類(lèi))的繼承關(guān)系;implements:表示類(lèi)實(shí)現(xiàn)了某些接口;修飾符:表示類(lèi)
3、訪(fǎng)問(wèn)權(quán)限(public)和類(lèi)型說(shuō)明(abstract、final);3.1類(lèi)與對(duì)象3.1.3成員變量的聲明格式:[<修飾符>][static][final]<變量類(lèi)型><變量名>static:表示是一個(gè)類(lèi)成員變量(靜態(tài)變量);final:表示是一個(gè)常量;例:finaldoublePI=3.1415926;修飾符:表示變量的訪(fǎng)問(wèn)權(quán)限(缺省訪(fǎng)問(wèn)friendly、public、protected和private)作用域:整個(gè)類(lèi)。同一類(lèi)中的所有方法都可以對(duì)其訪(fǎng)問(wèn)。并可簡(jiǎn)單地通過(guò)名字來(lái)引用。(在方法體內(nèi)定義的變量是局部變
4、量,作用域只能在方法體內(nèi))3.1類(lèi)與對(duì)象3.1.3成員方法方法的定義包括兩部分:方法聲明和方法體。一般格式為:方法聲明部分{方法體的內(nèi)容}3.1類(lèi)與對(duì)象3.1.4對(duì)象的創(chuàng)建與引用1、對(duì)象的創(chuàng)建創(chuàng)建一個(gè)對(duì)象包括對(duì)象的聲明和為對(duì)象分配成員變量?jī)蓚€(gè)步驟。(1)對(duì)象的聲明對(duì)象聲明的一般格式為:類(lèi)的名字對(duì)象名字;如:RectrectangleOne;這里,Rect是一個(gè)類(lèi)的名字,rectangleOne是我們聲明的對(duì)象的名字。用類(lèi)聲明的數(shù)據(jù)稱(chēng)為類(lèi)類(lèi)型變量,即對(duì)象,如上述Rect類(lèi)聲明的對(duì)象rectangleOne。3.1
5、類(lèi)與對(duì)象1、對(duì)象的創(chuàng)建(2)為聲明的對(duì)象分配成員變量為聲明的對(duì)象分配成員變量,即是給變量分配內(nèi)存空間。使用new運(yùn)算符和類(lèi)的構(gòu)造方法為聲明的對(duì)象分配成員變量,如果類(lèi)中沒(méi)有構(gòu)造方法,系統(tǒng)會(huì)調(diào)用默認(rèn)的構(gòu)造方法(默認(rèn)的構(gòu)造方法是無(wú)參數(shù)的,你一定還記得構(gòu)造方法的名字必須和類(lèi)名相同這一規(guī)定),上述的Rect類(lèi)提供了2個(gè)構(gòu)造方法,下面都是合法的創(chuàng)建對(duì)象的語(yǔ)句:rectangleOne=newRect();3.1類(lèi)與對(duì)象2、對(duì)象的引用我們已經(jīng)知道,當(dāng)用類(lèi)創(chuàng)建一個(gè)對(duì)象時(shí),成員變量被分配內(nèi)存空間,這些內(nèi)存空間稱(chēng)做該對(duì)象的實(shí)體或變
6、量,而對(duì)象中存放著引用,以確保這些變量由該對(duì)象操作使用。因此,如果兩個(gè)對(duì)象有相同的引用,那么就具有同樣的實(shí)體。3.1類(lèi)與對(duì)象3.1.5類(lèi)的繼承與多態(tài)只支持單重繼承,不支持多重繼承,只能從一個(gè)父類(lèi)繼承。必須從一個(gè)類(lèi)繼承默認(rèn)是從Object繼承如果類(lèi)Sub是類(lèi)Super的子類(lèi),則類(lèi)Sub只繼承超類(lèi)Super中非private的成員變量和方法。子類(lèi)Sub中,包括兩部分的內(nèi)容:從超類(lèi)Super中繼承下來(lái)的變量和方法,自己新增加的變量和方法。3.1類(lèi)與對(duì)象3.1.5類(lèi)的繼承與多態(tài)繼承的語(yǔ)法修飾符class類(lèi)名extend
7、s父類(lèi){新屬性;新方法;重載的方法;覆蓋的方法;}3.1類(lèi)與對(duì)象3.1.5類(lèi)的繼承與多態(tài)多態(tài)是指同一個(gè)名字的若干個(gè)方法,有不同的實(shí)現(xiàn)(即方法體中的代碼不一樣)。通過(guò)方法的重載和覆蓋來(lái)實(shí)現(xiàn)多態(tài)性。方法的重載一個(gè)類(lèi)中,有若干個(gè)方法名字相同,但方法的參數(shù)不同,稱(chēng)為方法的重載。不正確的方法重載publicvoidfunover(inta,floatb)publicintfunover(inta,floatb)3.1類(lèi)與對(duì)象3.1.5類(lèi)的繼承與多態(tài)對(duì)于多態(tài),可以總結(jié)它為:(1)使用父類(lèi)類(lèi)型的引用指向子類(lèi)的對(duì)象;(2)該引
8、用只能調(diào)用父類(lèi)中定義的方法和變量;(3)如果子類(lèi)中重寫(xiě)了父類(lèi)中的一個(gè)方法,那么在調(diào)用這個(gè)方法的時(shí)候,將會(huì)調(diào)用子類(lèi)中的這個(gè)方法;(動(dòng)態(tài)連接、動(dòng)態(tài)調(diào)用)(4)變量不能被重寫(xiě)(覆蓋),”重寫(xiě)“的概念只針對(duì)方法,如果在子類(lèi)中”重寫(xiě)“了父類(lèi)中的變量,那么在編譯時(shí)會(huì)報(bào)錯(cuò)。3.2抽象類(lèi)Java也可以創(chuàng)建專(zhuān)門(mén)的類(lèi)用來(lái)當(dāng)作父類(lèi),這種類(lèi)稱(chēng)為抽象類(lèi)(abstractclass)。即用關(guān)鍵字abstract修