《Java程序設(shè)計(jì)教程》課件第4章 深入面向?qū)ο蟪绦蛟O(shè)計(jì)_第1頁
《Java程序設(shè)計(jì)教程》課件第4章 深入面向?qū)ο蟪绦蛟O(shè)計(jì)_第2頁
《Java程序設(shè)計(jì)教程》課件第4章 深入面向?qū)ο蟪绦蛟O(shè)計(jì)_第3頁
《Java程序設(shè)計(jì)教程》課件第4章 深入面向?qū)ο蟪绦蛟O(shè)計(jì)_第4頁
《Java程序設(shè)計(jì)教程》課件第4章 深入面向?qū)ο蟪绦蛟O(shè)計(jì)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

多態(tài)

2接口

4繼承

31抽象類

33內(nèi)部類

35本章內(nèi)容提要

面向?qū)ο蟮某绦蛟O(shè)計(jì)方法力求符合人腦的思維方式,通過符合人類思維的更抽象的客觀世界模型,降低、分解問題的難度和復(fù)雜性,并以此來解決問題。4.1繼承

繼承的定義在Java語言中,用extends關(guān)鍵字來表示一個(gè)類繼承了另一個(gè)類,被繼承的類稱為父類、超類或基類,派生的新類稱為子類。例如:

publicclassSubextendsBase{

…}4.1繼承1.父類與子類父類和子類的關(guān)系可以用自然語言描述為:子類isa父類。

[例4-1]子類繼承父類子類與父類的關(guān)系類似于家族關(guān)系,繼承關(guān)系可以一直傳遞下去。4.1繼承2.繼承的限制(1)子類和父類位于同一個(gè)包中子類繼承父類中public、protected和默認(rèn)訪問級別的成員變量和成員方法。(2)子類和父類位于不同的包中子類繼承父類中public和protected訪問級別的成員變量和成員方法。

[例4-2]繼承的限制4.1繼承3.類繼承的原則(1)子類只能有一個(gè)直接父類(2)繼承具有傳遞性(3)繼承不能循環(huán)(4)除Object類外,所有類都有父類4.1繼承

屬性隱藏子類繼承父類時(shí),不需要重新定義父類中可以被繼承的屬性。某些情況下,子類需要對從父類繼承來的屬性變量重新加以定義,使父類和子類的屬性同名但不同值,這種機(jī)制稱為屬性的隱藏。

[例4-3]屬性隱藏4.1繼承

方法覆蓋

如果在子類中定義的一個(gè)方法,其名稱、返回類型及參數(shù)定義正好與父類中某個(gè)方法的名稱、返回類型及參數(shù)定義相同,則可以說,子類的方法覆蓋了父類的方法。方法的參數(shù)定義相同指方法中所有對應(yīng)順序的參數(shù)的類型相同,并且參數(shù)的個(gè)數(shù)相同。

4.1繼承【例4-4】方法的覆蓋4.1繼承直接訪問父類的學(xué)制:4直接訪問子類的學(xué)制:3調(diào)用子類的方法(已覆蓋的方法)訪問子類的學(xué)制:3方法覆蓋的其他要求:(1)子類方法不能縮小父類方法的訪問權(quán)限。(2)子類方法不能拋出比父類方法更多的異常。(3)方法覆蓋只存在于子類和父類(包括直接父類和間接父類)之間。

4.1繼承

(4)父類的靜態(tài)方法不能被子類覆蓋為非靜態(tài)方法。(5)子類可以定義與父類的靜態(tài)方法同名的靜態(tài)方法,以便在子類中隱藏父類的靜態(tài)方法(6)父類的非靜態(tài)方法不能被子類覆蓋為靜態(tài)方法。(7)父類的私有方法不能被子類覆蓋。4.1繼承super與this關(guān)鍵字

1.引用構(gòu)造方法在子類的構(gòu)造方法中,可以使用super代表指定的某個(gè)父類的構(gòu)造方法;使用this關(guān)鍵字可以代表同一類中不同的構(gòu)造方法。當(dāng)調(diào)用子類的構(gòu)造方法創(chuàng)建對象時(shí),如果在子類的構(gòu)造方法中沒有顯式的調(diào)用父類的構(gòu)造方法,則super()方法將被自動調(diào)用。4.1繼承【例4-5】super與this關(guān)鍵字4.1繼承createastudent:John,heisagraduateStudentcreateastudent:Tom,heisagraduateStudenthistutor:Bill,hisspecialtydirection:computer

2.引用隱藏變量在Java語言中,變量的隱藏有兩種:其一,子類成員變量和父類成員變量同名,父類變量隱藏;其二,類的局部變量和類的成員變量同名,隱藏類的成員變量。4.1繼承【例4-6】被覆蓋變量的訪問4.1繼承stu_no=40011stu_nois30011stu_noofStudentis10011stu_noofGraduateStudentis200113.引用覆蓋方法當(dāng)子類的某個(gè)方法覆蓋了父類的一個(gè)方法,可以通過super關(guān)鍵字訪問父類的方法,而通過this關(guān)鍵字則可以訪問當(dāng)前類中的方法。

super關(guān)鍵字不能多重使用。例如,super.super()就是非法操作。

4.1繼承【例4-7】被覆蓋方法的訪問4.1繼承stu_noofStudentis10011stu_noofGraduateStudentis20011stu_noofGraduateStudentis30011Java語言的多態(tài)可以分編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。

編譯時(shí)多態(tài)又稱為靜態(tài)多態(tài),主要體現(xiàn)為方法的動態(tài)重載;

運(yùn)行時(shí)多態(tài)又稱為為動態(tài)多態(tài),主要體現(xiàn)為動態(tài)綁定。4.2多態(tài)

方法重載

對于類的方法(包括從父類中繼承的方法),如果有兩個(gè)方法的方法名相同,但參數(shù)不一致,那么可以說,一個(gè)方法是另一個(gè)方法的重載方法。參數(shù)不一致包括參數(shù)數(shù)目的不同,也包括參數(shù)順序和參數(shù)類型的不同。

4.2多態(tài)

重載方法必須滿足以下條件:(1)方法名相同。(2)方法中對應(yīng)的參數(shù)類型、個(gè)數(shù)至少有一項(xiàng)不相同。(3)方法的返回類型可以不相同。(4)方法的修飾符可以不相同。在一個(gè)類中不允許定義兩個(gè)方法名相同,并且參數(shù)定義也完全相同的方法。4.2多態(tài)[例4-8]方法重載的定義和使用4.2多態(tài)astudentagraduatestudentagraduatestudent:Tom

對象造型

把一個(gè)類的子類引用賦值給父類變量,稱為向上造型。例如:

Students=newGraduateStudent();

把父類對象賦值給子類對象需要強(qiáng)制類型轉(zhuǎn)換,稱為向下造型。向下造型必須滿足這樣一個(gè)前提條件:父類對象必須是從子類對象向上造型過來的。4.2多態(tài)

對象造型機(jī)制必須遵守下面3條原則:(1)類對象只能轉(zhuǎn)換為有繼承關(guān)系的子類或父類對象,不能轉(zhuǎn)換為沒有繼承關(guān)系的類的實(shí)例。(2)一個(gè)類的實(shí)例也是其所有基類的實(shí)例。(3)對象轉(zhuǎn)換為接口的條件是,其類或某個(gè)父類實(shí)現(xiàn)了該接口。[例4-9]對象的向上造型與向下造型4.2多態(tài)

動態(tài)綁定

由于類之間的繼承關(guān)系,導(dǎo)致父類和子類中存在同名的方法,對于具有動態(tài)類型的對象,在運(yùn)行時(shí)應(yīng)該選擇哪個(gè)方法來執(zhí)行呢?此時(shí)的規(guī)則是:由最近賦值給對象變量的值的類型決定。這就是所謂的方法與方法體的后期綁定,又稱為動態(tài)綁定。4.2多態(tài)【例4-10】動態(tài)綁定4.2多態(tài)astudentagraduatestudentagraduatestudentagraduatestudent:Tom抽象類的定義[<訪問控制修飾符>]abstractclass<抽象類名>[extends<類名>][implements<接口列表>]{

成員變量聲明;

….<返回值類型><方法名>(<形參表>)[throws<例外名列表>]{……}abstract<返回值類型><方法名>(<形參表>)[throws<例外名列表>]}4.3抽象類

抽象類的使用由于抽象類是對一種具體概念的抽象,因此,抽象類不能被實(shí)例化。定義抽象類的目的是要依據(jù)它的格式來擴(kuò)展出新的類,因此,抽象類定義了沒有具體實(shí)現(xiàn)的抽象方法,而將這些具體實(shí)現(xiàn)保留到從抽象類派生出的新類中定義。4.3抽象類[例4-11]使用抽象類4.3抽象類Rectangle:LineColor=blue,FillColor=yellow,Width=20,Height=10Circle:LineColor=red,FillColor=green,Radius=5.5

為了既能夠?qū)崿F(xiàn)多重繼承的功能,又不希望引入多重繼承的復(fù)雜性和低效率,Java提供了接口(interface)。接口是用來實(shí)現(xiàn)多重繼承功能的一種結(jié)構(gòu),它在語法上與類相似,接口中有屬性和方法,接口間可以形成繼承關(guān)系。

4.4接口接口的定義[public]interface<接口名>[extends<父接口列表>]{[public][static][final]<屬性數(shù)據(jù)類型><屬性名>=<屬性值>;

…[public][abstract]<返回值類型><方法名>(<形參表>)[throws<異常列表>];

…}4.4接口

interfaceEditShape{finalStringS=“SUNW”;

…voidchangeFont();}

接口的定義與類的定義非常相似,但與類不同,接口之間可以多重繼承,即一個(gè)接口可以繼承多個(gè)接口。

4.4接口

接口的實(shí)現(xiàn)

類的聲明中用implements關(guān)鍵字來表示一個(gè)類實(shí)現(xiàn)了某個(gè)接口。

[<類修飾符>]class<類名>[extends<父類名>][implements<接口列表>][例4-13]接口的實(shí)現(xiàn)4.4接口

接口的多態(tài)

接口把方法描述與方法實(shí)現(xiàn)分開,不同的實(shí)現(xiàn)類對同一個(gè)方法有不同的實(shí)現(xiàn)方式,但對外具有一個(gè)統(tǒng)一的接口,在運(yùn)行時(shí)根據(jù)具體實(shí)現(xiàn)類的實(shí)現(xiàn)展現(xiàn)不同的功能。4.4接口【例4-14】使用接口4.4接口上機(jī)考試標(biāo)準(zhǔn)化考試Chinses課的考試

內(nèi)部類指在一個(gè)類的類體內(nèi)部定義的類。內(nèi)部類所在的類稱為外包類。內(nèi)部類有多種形式,按照內(nèi)部類是否含有顯示的類名,可以將內(nèi)部類分為實(shí)名內(nèi)部類和匿名內(nèi)部類。4.5內(nèi)部類

實(shí)名內(nèi)部類

1.定義格式

[<類修飾符>]class<類名>[extends<父類名>][implements<接口名列表>]{

類體

}4.5內(nèi)部類

由于內(nèi)部類被看作是類的成員,因此內(nèi)部類的修飾符與類成員的修飾符相似,可以用private、protected、static等修飾。

[例4-15]簡單、直觀的實(shí)名內(nèi)部類4.5內(nèi)部類4.5內(nèi)部類2.使用方式在外包類的類體中使用實(shí)名內(nèi)部類時(shí):實(shí)名內(nèi)部類名對象名=new實(shí)名內(nèi)部類名(構(gòu)造方法參數(shù)列表);

在外包類之外的其他類的類體中使用該外包類的實(shí)名內(nèi)部類:外包類名.內(nèi)部類名對象名=new外包類名(參數(shù)列表).new內(nèi)部類名(參數(shù)列表);

在訪問實(shí)名內(nèi)部類的靜態(tài)成員屬性和靜態(tài)成員方法時(shí):

[外包類名.]實(shí)名內(nèi)部類.靜態(tài)屬性名;

[外包類名.]實(shí)名內(nèi)部類.靜態(tài)方法名(參數(shù)列表);[例4-16]實(shí)名內(nèi)部類的使用4.5內(nèi)部類

匿名內(nèi)部類

匿名內(nèi)部類不具有類名,不能具有抽象方法和靜態(tài)方法,并且不能派生出子類。

1.定義格式

new父類名(父類的構(gòu)造方法參數(shù)列表){

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論