清華大學(xué)javappt第5章_第1頁(yè)
清華大學(xué)javappt第5章_第2頁(yè)
清華大學(xué)javappt第5章_第3頁(yè)
清華大學(xué)javappt第5章_第4頁(yè)
清華大學(xué)javappt第5章_第5頁(yè)
已閱讀5頁(yè),還剩87頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第5章章 接口與多態(tài)接口與多態(tài)鄭莉鄭莉programming in java清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)2目錄目錄l5.1 接口接口l5.2 塑型塑型l5.3 多態(tài)的概念多態(tài)的概念l5.4 多態(tài)的應(yīng)用多態(tài)的應(yīng)用l5.5 構(gòu)造方法與多態(tài)構(gòu)造方法與多態(tài)l5.6 內(nèi)部類內(nèi)部類l5.7 本章小結(jié)本章小結(jié)清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)35.1 接口接口l接口接口 與抽象類一樣都是定義多個(gè)類的共同屬性 使抽象的概念更深入了一層,是一個(gè)“純”抽象類,它只提供一種形式,并不提供實(shí)現(xiàn) 允許創(chuàng)建者規(guī)定方法的基本形式:方法名、參數(shù)列表以及返回類型,但不規(guī)定方法主體 也可以包含基本數(shù)據(jù)類型的數(shù)據(jù)成員,但它

2、們都默認(rèn)為static和final清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)45.1.1 接口的作用及語(yǔ)法接口的作用及語(yǔ)法l接口的作用接口的作用 是面向?qū)ο蟮囊粋€(gè)重要機(jī)制 實(shí)現(xiàn)多繼承,同時(shí)免除c+中的多繼承那樣的復(fù)雜性 建立類和類之間的“協(xié)議”l把類根據(jù)其實(shí)現(xiàn)的功能來(lái)分別代表,而不必顧慮它所在的類繼承層次;這樣可以最大限度地利用動(dòng)態(tài)綁定,隱藏實(shí)現(xiàn)細(xì)節(jié)l實(shí)現(xiàn)不同類之間的常量共享接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)5l接口允許我們?cè)诳雌饋?lái)不相干的對(duì)象接口允許我們?cè)诳雌饋?lái)不相干的對(duì)象之間定義共同行為之間定義共同行為5.1.1 接口的作用及語(yǔ)法接口的作用及語(yǔ)法與抽象類的不同與抽象類的不同接口清華大學(xué) 鄭莉j

3、ava語(yǔ)言程序設(shè)計(jì)6l保險(xiǎn)公司的例子保險(xiǎn)公司的例子 具有車輛保險(xiǎn)、人員保險(xiǎn)、公司保險(xiǎn)等多種保險(xiǎn)業(yè)務(wù),在對(duì)外提供服務(wù)方面具有相似性,如都需要計(jì)算保險(xiǎn)費(fèi)(premium)等,因此可聲明一個(gè)insurable 接口 在uml圖中,實(shí)現(xiàn)接口用帶有空三角形的虛線表示5.1.1 接口的作用及語(yǔ)法接口的作用及語(yǔ)法例例5_1insurablecompanypersoncar接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)7l接口的語(yǔ)法接口的語(yǔ)法 聲明格式為接口修飾符 interface 接口名稱 extends 父接口名/方法的原型聲明或靜態(tài)常量 接口的數(shù)據(jù)成員一定要賦初值,且此值將不能再更改,允許省略final關(guān)鍵字

4、 接口中的方法必須是“抽象方法”,不能有方法體,允許省略public及abstract關(guān)鍵字5.1.1 接口的作用及語(yǔ)法接口的作用及語(yǔ)法接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)8l例例5.1中的中的insurable 接口聲明如下,接口聲明如下,可見(jiàn)其中的方法都是抽象方法可見(jiàn)其中的方法都是抽象方法 public interface insurable public int getnumber(); public int getcoverageamount(); public double calculatepremium(); public date getexpirydate(); 5.1.1

5、 接口的作用及語(yǔ)法接口的作用及語(yǔ)法 例例5_1保險(xiǎn)接口的聲明保險(xiǎn)接口的聲明接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)9l聲明一個(gè)接口聲明一個(gè)接口shape2d,可利用它來(lái)實(shí)現(xiàn)可利用它來(lái)實(shí)現(xiàn)二維的幾何形狀類二維的幾何形狀類circle和和rectangle 把計(jì)算面積的方法聲明在接口里 pi值是常量,把它聲明在接口的數(shù)據(jù)成員里interface shape2d /聲明shape2d接口 final double pi=3.14; /數(shù)據(jù)成員一定要初始化 public abstract double area();/抽象方法 在接口的聲明中,允許省略一些關(guān)鍵字,也可聲明如下interface shap

6、e2d double pi=3.14; double area(); 5.1.1 接口的作用及語(yǔ)法接口的作用及語(yǔ)法例例5_2接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)105.1.2 實(shí)現(xiàn)接口實(shí)現(xiàn)接口l接口的實(shí)現(xiàn)接口的實(shí)現(xiàn)接口不能用new運(yùn)算符直接產(chǎn)生對(duì)象,必須利用其特性設(shè)計(jì)新的類,再用新類來(lái)創(chuàng)建對(duì)象利用接口設(shè)計(jì)類的過(guò)程,稱為接口的實(shí)現(xiàn),使用implements關(guān)鍵字語(yǔ)法如下public class 類名稱 implements 接口名稱 /* bodies for the interface methods */ /* own data and methods. */ l必須實(shí)現(xiàn)接口中的所有方法l

7、來(lái)自接口的方法必須聲明成public接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)11l實(shí)現(xiàn)接口實(shí)現(xiàn)接口insurable,聲明汽車類實(shí)現(xiàn)例聲明汽車類實(shí)現(xiàn)例5.1中的中的insurable接口,實(shí)現(xiàn)接口中的所有抽象方法接口,實(shí)現(xiàn)接口中的所有抽象方法public class car implements insurable public int getpolicynumber() / write code here public double calculatepremium() / write code here public date getexpirydate() / write code her

8、e public int getcoverageamount() / write code here public int getmileage() /新添加的方法 /write code here 5.1.2 實(shí)現(xiàn)接口實(shí)現(xiàn)接口 例例5_3接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)12l對(duì)象可以被轉(zhuǎn)型為其所屬類實(shí)現(xiàn)的接口類型對(duì)象可以被轉(zhuǎn)型為其所屬類實(shí)現(xiàn)的接口類型 getpolicynumber、calculatepremium是insurable接口中聲明的方法 getmileage是car類新添加的方法,insurable接口中沒(méi)有聲明此方法car jetta = new car(); insu

9、rable item = (insurable)jetta; /對(duì)象轉(zhuǎn)型為接口類型 item.getpolicynumber();item.calculatepremium(); item.getmileage(); / 接口中沒(méi)有聲明此方法,不可以jetta.getmileage(); / 類中有此方法,可以(car)item).getmileage(); / 轉(zhuǎn)型回原類,可調(diào)用此方法了5.1.2 實(shí)現(xiàn)接口實(shí)現(xiàn)接口 對(duì)象轉(zhuǎn)型對(duì)象轉(zhuǎn)型接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)135.1.2 實(shí)現(xiàn)接口實(shí)現(xiàn)接口 例例5_4class circle implements shape2d double r

10、adius; public circle(double r) radius=r; public double area() return (pi * radius * radius); class rectangle implements shape2d int width,height; public rectangle(int w,int h) width=w; height=h; public double area() return (width * height); l聲明聲明circle與與rectangle兩個(gè)類實(shí)現(xiàn)兩個(gè)類實(shí)現(xiàn)shape2d接口接口接口清華大學(xué) 鄭莉java語(yǔ)言程

11、序設(shè)計(jì)14l測(cè)試類測(cè)試類public class interfacetester public static void main(string args) rectangle rect=new rectangle(5,6); system.out.println(area of rect = + rect.area(); circle cir=new circle(2.0); system.out.println(area of cir = + cir.area(); l運(yùn)行結(jié)果運(yùn)行結(jié)果area of rect = 30.0area of cir = 12.565.1.2 實(shí)現(xiàn)接口實(shí)現(xiàn)接口 例

12、例5_4運(yùn)行結(jié)果運(yùn)行結(jié)果接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)15l聲明接口類型的變量,并用它來(lái)訪問(wèn)對(duì)象聲明接口類型的變量,并用它來(lái)訪問(wèn)對(duì)象public class variabletester public static void main(string args) shape2d var1,var2;var1=new rectangle(5,6);system.out.println(area of var1 = + var1.area();var2=new circle(2.0);system.out.println(area of var2 = + var2.area();l輸出結(jié)果輸

13、出結(jié)果area of var1 = 30.0area of var2 = 12.565.1.2 實(shí)現(xiàn)接口實(shí)現(xiàn)接口 例例5_5接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)16lmovableobject接口定義了所有接口定義了所有“可移動(dòng)可移動(dòng)對(duì)象對(duì)象”能做的事情能做的事情public interface movableobject public boolean start(); public void stop(); public boolean turn(int degrees); public double fuelremaining(); public void changespeed(dou

14、ble kmperhour);5.1.2 實(shí)現(xiàn)接口實(shí)現(xiàn)接口 movableobject接口接口接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)17lplane、car、 train、 boat 分別實(shí)現(xiàn)分別實(shí)現(xiàn) movableobject 接口接口public class plane implements movableobject public int seatcapacity; public company owner; public date lastrepairdate; /實(shí)現(xiàn)movalbelobject接口的所有方法 public boolean start() /啟動(dòng)飛機(jī),成功則返回tru

15、e public void stop() /停止 public boolean turn(int degrees) /轉(zhuǎn)向,成功則返回true public double fuelremaining() /返回燃料剩余量 public void changespeed(double kmperhour) /改變速度 /plane類自己的方法: public date getlastrepairdate() /. public double calculatewindresistance() /. 5.1.2 實(shí)現(xiàn)接口實(shí)現(xiàn)接口 movableobject接口的實(shí)現(xiàn)接口的實(shí)現(xiàn)接口清華大學(xué) 鄭莉ja

16、va語(yǔ)言程序設(shè)計(jì)18l為為 movableobjects安裝遙控器安裝遙控器(remote control)public class remotecontrol private movableobject machine; remotecontrol(movableobject m) machine = m; /按下“啟動(dòng)”按鈕: public void start() boolean okay = machine.start(); if (!okay) display(no response on start); /. remote control 構(gòu)造方法的形參類型為 movableobj

17、ect,它可以是plane, car, train, boat, 等等5.1.2 實(shí)現(xiàn)接口實(shí)現(xiàn)接口 remotecontrol類類接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)195.1.3 多重繼承多重繼承l(wèi)多重繼承多重繼承 java的設(shè)計(jì)以簡(jiǎn)單實(shí)用為導(dǎo)向,不允許一個(gè)類有多個(gè)父類 但允許一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,通過(guò)這種機(jī)制可實(shí)現(xiàn)多重繼承 一個(gè)類實(shí)現(xiàn)多個(gè)接口的語(yǔ)法如下類修飾符 class 類名稱 implements 接口1,接口2, 接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)20lcar類可以實(shí)現(xiàn)接口類可以實(shí)現(xiàn)接口insurable,drivable,sellablepublic class car i

18、mplements insurable, drivable, sellable . 5.1.3 多重繼承多重繼承 car的例子的例子接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)21l聲明聲明circle類實(shí)現(xiàn)接口類實(shí)現(xiàn)接口shape2d和和color shape2d具有pi與area()方法,用來(lái)計(jì)算面積 color則具有setcolor方法,可用來(lái)賦值顏色 通過(guò)實(shí)現(xiàn)這兩個(gè)接口,circle類得以同時(shí)擁有這兩個(gè)接口的成員,達(dá)到了多重繼承的目的interface shape2d /聲明shape2d接口 final double pi=3.14; /數(shù)據(jù)成員一定要初始化 public abstract

19、 double area(); /抽象方法interface color void setcolor(string str); /抽象方法5.1.3 多重繼承多重繼承 例例5_6接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)22class circle implements shape2d,color / 實(shí)現(xiàn)circle類 double radius; string color; public circle(double r) /構(gòu)造方法 radius=r; public double area() /定義area()的處理方式 return (pi*radius*radius); public v

20、oid setcolor(string str) /定義setcolor()的處理方式 color=str; system.out.println(color=+color); 接口5.1.3 多重繼承多重繼承 例例5_6清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)23l測(cè)試類測(cè)試類public class multiinterfacetester public static void main(string args) circle cir; cir=new circle(2.0); cir.setcolor(blue); system.out.println(area = + cir.area();

21、 l輸出結(jié)果輸出結(jié)果color=bluearea = 12.56接口5.1.3 多重繼承多重繼承 例例5_6運(yùn)行結(jié)果運(yùn)行結(jié)果清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)245.1.4 接口的擴(kuò)展接口的擴(kuò)展l接口的擴(kuò)展接口的擴(kuò)展 接口可通過(guò)擴(kuò)展的技術(shù)派生出新的接口l原來(lái)的接口稱為基本接口(base interface)或父接口(super interface)l派生出的接口稱為派生接口(derived interface)或子接口(sub interface) 派生接口不僅可以保有父接口的成員,同時(shí)也可加入新成員以滿足實(shí)際問(wèn)題的需要 實(shí)現(xiàn)接口的類也必須實(shí)現(xiàn)此接口的父接口 接口擴(kuò)展的語(yǔ)法interface

22、子接口的名稱 extends 父接口的名稱1,父接口的名稱2, 接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)25lshape是父接口,是父接口,shape2d與與shape3d是其子接是其子接口???。circle類及類及rectangle類實(shí)現(xiàn)接口類實(shí)現(xiàn)接口shape2d,而而box類及類及sphere類實(shí)現(xiàn)接口類實(shí)現(xiàn)接口shape3d 5.1.4 接口的擴(kuò)展接口的擴(kuò)展 例例5_7shape接口接口shape2d接口接口shape3d接口接口sphere類類box類類rectangle類類circle類類接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)26l部分代碼如下部分代碼如下/ 聲明shape接口int

23、erface shape double pi=3.14; void setcolor(string str); /聲明shape2d接口擴(kuò)展了shape接口interface shape2d extends shape double area();5.1.4 接口的擴(kuò)展接口的擴(kuò)展 例例5_7接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)27class circle implements shape2d double radius; string color; public circle(double r) radius=r; public double area() return (pi*radius

24、*radius); public void setcolor(string str) color=str; system.out.println(color=+color); public class extendsinterfacetester /測(cè)試類 public static void main(string args) circle cir; cir=new circle(2.0); cir.setcolor(blue); system.out.println(area = + cir.area(); 5.1.4 接口的擴(kuò)展接口的擴(kuò)展 例例5_7接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)

25、28l運(yùn)行結(jié)果運(yùn)行結(jié)果color=bluearea = 12.56l說(shuō)明說(shuō)明 首先聲明了父接口shape,然后聲明其子接口shape2d 之后聲明類circle實(shí)現(xiàn)shape2d子接口,因而在此類內(nèi)必須明確定義setcolor()與area()方法的處理方式 最后在主類中我們聲明了circle類型的變量cir并創(chuàng)建新的對(duì)象,最后通過(guò)cir對(duì)象調(diào)用setcolor()與area()方法5.1.4 接口的擴(kuò)展接口的擴(kuò)展 例例5_7運(yùn)行結(jié)果運(yùn)行結(jié)果接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)29lfixedinsurable 和和depreciatinginsurable接口接口 都繼承了insurabl

26、e接口 實(shí)現(xiàn)它們類也必須實(shí)現(xiàn)insurable接口中的所有方法public interface depreciatinginsurable extends insurable public double computefairmarketvalue(); public interface fixedinsurable extends insurable public int getevaluationperiod();5.1.4 接口的擴(kuò)展接口的擴(kuò)展 insurable接口的例子接口的例子接口清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)305.2 塑型塑型l塑型塑型( (type-casting)typ

27、e-casting)又稱為類型轉(zhuǎn)換方式l隱式(自動(dòng))的類型轉(zhuǎn)換l顯式(強(qiáng)制)的類型轉(zhuǎn)換清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)315.2.1 塑型的概念塑型的概念l塑型的對(duì)象包括塑型的對(duì)象包括基本數(shù)據(jù)類型l將值從一種形式轉(zhuǎn)換成另一種形式引用變量l將對(duì)象暫時(shí)當(dāng)成更一般的對(duì)象來(lái)對(duì)待,并不改變其類型l只能被塑型為任何一個(gè)父類類型對(duì)象所屬的類實(shí)現(xiàn)的一個(gè)接口被塑型為父類或接口后,再被塑型回其本身所在的類塑型清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)32lmanager對(duì)象對(duì)象 可以被塑型為employee、person、object或insurable, 不能被塑型為customer、company或car obje

28、ctpersonemployeecustomermanagercompanycarinsurable5.2.1 塑型的概念塑型的概念 一個(gè)例子一個(gè)例子塑型清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)33l基本數(shù)據(jù)類型基本數(shù)據(jù)類型 相容類型之間存儲(chǔ)容量低的自動(dòng)向存儲(chǔ)容量高的類型轉(zhuǎn)換l引用變量引用變量 被塑型成更一般的類employee emp; emp = new manager(); /將manager類型的對(duì)象直接賦給 /employee類的引用變量,系統(tǒng)會(huì) /自動(dòng)將manage對(duì)象塑型為employee類 被塑型為對(duì)象所屬類實(shí)現(xiàn)的接口類型car jetta = new car(); insurabl

29、e item = jetta; 5.2.1 塑型的概念塑型的概念 隱式隱式(自動(dòng)自動(dòng))的類型轉(zhuǎn)換的類型轉(zhuǎn)換塑型清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)345.2.1 塑型的概念塑型的概念 顯式顯式(強(qiáng)制強(qiáng)制)的類型轉(zhuǎn)換的類型轉(zhuǎn)換l基本數(shù)據(jù)類型基本數(shù)據(jù)類型(int)871.34354; / 結(jié)果為 871 (char)65; / 結(jié)果為a (long)453; / 結(jié)果為453ll引用變量:還原為本來(lái)的類型引用變量:還原為本來(lái)的類型employee emp; manager man;emp = new manager();man = (manager)emp; /將emp強(qiáng)制塑型為本來(lái)的類型塑型清華大

30、學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)355.2.2 塑型的應(yīng)用塑型的應(yīng)用l塑型應(yīng)用的場(chǎng)合包括塑型應(yīng)用的場(chǎng)合包括賦值轉(zhuǎn)換l賦值號(hào)右邊的表達(dá)式類型或?qū)ο筠D(zhuǎn)換為左邊的類型方法調(diào)用轉(zhuǎn)換l實(shí)參的類型轉(zhuǎn)換為形參的類型算數(shù)表達(dá)式轉(zhuǎn)換l算數(shù)混合運(yùn)算時(shí),不同類型的項(xiàng)轉(zhuǎn)換為相同的類型再進(jìn)行運(yùn)算字符串轉(zhuǎn)換l字符串連接運(yùn)算時(shí),如果一個(gè)操作數(shù)為字符串,一個(gè)操作數(shù)為數(shù)值型,則會(huì)自動(dòng)將數(shù)值型轉(zhuǎn)換為字符串 塑型清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)36l當(dāng)一個(gè)類對(duì)象被塑型為其父類后,它提供的方法當(dāng)一個(gè)類對(duì)象被塑型為其父類后,它提供的方法會(huì)減少會(huì)減少 當(dāng)manager對(duì)象被塑型為employee之后,它只能接收getname()及gete

31、mployeenumber()方法,不能接收getsalary()方法 將其塑型為本來(lái)的類型后,又能接收getsalary()方法了5.2.2 塑型的應(yīng)用塑型的應(yīng)用塑型清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)375.2.3 方法的查找方法的查找l如果在塑型前和塑型后的類中都提供如果在塑型前和塑型后的類中都提供了相同的方法,如果將此方法發(fā)送給了相同的方法,如果將此方法發(fā)送給塑型后的對(duì)象,那么系統(tǒng)將會(huì)調(diào)用哪塑型后的對(duì)象,那么系統(tǒng)將會(huì)調(diào)用哪一個(gè)類中的方法一個(gè)類中的方法? 實(shí)例方法的查找 類方法的查找塑型清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)38l從對(duì)象創(chuàng)建時(shí)的類開(kāi)始,沿類層次向上查從對(duì)象創(chuàng)建時(shí)的類開(kāi)始,沿類層

32、次向上查找找 manager manmanager man = new manager(); = new manager(); employee emp1employee emp1 = new employee(); = new employee(); employee emp2employee emp2 = (employee)man; = (employee)man; emp1emp1. .computepaycomputepay(); (); / / 調(diào)用調(diào)用employeeemployee類中的類中的computepaycomputepay()()方法方法 manman. .compu

33、tepaycomputepay(); (); / / 調(diào)用調(diào)用managermanager類中的類中的computepaycomputepay()()方法方法 emp2emp2. .computepaycomputepay(); (); / / 調(diào)用調(diào)用managermanager類中的類中的computepaycomputepay()()方法方法 5.2.3 方法的查找方法的查找 實(shí)例方法的查找實(shí)例方法的查找塑型清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)39l總是在引用變量聲明時(shí)所屬的類中進(jìn)行查總是在引用變量聲明時(shí)所屬的類中進(jìn)行查找找 manager manmanager man = new man

34、ager(); = new manager(); employee emp1employee emp1 = new employee(); = new employee(); employee emp2employee emp2 = (employee)man; = (employee)man; manman. .expenseallowanceexpenseallowance(); /in manager (); /in manager emp1emp1. .expenseallowanceexpenseallowance(); /in employee (); /in employee e

35、mp2emp2. .expenseallowanceexpenseallowance(); /in employee! (); /in employee! 5.2.3 方法的查找方法的查找 類方法的查找類方法的查找塑型清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)405.3 多態(tài)的概念多態(tài)的概念l多態(tài)多態(tài) 是指不同類型的對(duì)象可以響應(yīng)相同的消息 從相同的基類派生出來(lái)的多個(gè)類型可被當(dāng)作同一種類型對(duì)待,可對(duì)這些不同的類型進(jìn)行同樣的處理,由于多態(tài)性,這些不同派生類對(duì)象響應(yīng)同一方法時(shí)的行為是有所差別的 例如l所有的object類的對(duì)象都響應(yīng)tostring()方法l所有的bankaccount類的對(duì)象都響應(yīng)depo

36、sit()方法清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)415.3.1 多態(tài)的目的多態(tài)的目的l多態(tài)的目的多態(tài)的目的 所有的對(duì)象都可被塑型為相同的類型,響應(yīng)相同的消息 使代碼變得簡(jiǎn)單且容易理解 使程序具有很好的“擴(kuò)展性”多態(tài)的概念清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)42l繪圖繪圖直接的方式直接的方式 希望能夠畫(huà)出任意子類型對(duì)象的形狀,可以在shape 類中聲明幾個(gè)繪圖方法,對(duì)不同的實(shí)際對(duì)象,采用不同的畫(huà)法if (ashape instanceof circle) ashape.drawcircle(); if (ashape instanceof triangle) ashape.drawtriangle

37、(); if (ashape instanceof rectangle)ashape.drawrectangle();5.3.1 多態(tài)的目的多態(tài)的目的 一個(gè)例子一個(gè)例子多態(tài)的概念清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)43l繪圖繪圖更好的方式更好的方式 在每個(gè)子類中都聲明同名的draw()方法 以后繪圖可如下進(jìn)行shape s = new circle(); s.draw(); lcircle屬于shape的一種,系統(tǒng)會(huì)執(zhí)行自動(dòng)塑型l當(dāng)調(diào)用方法draw時(shí),實(shí)際調(diào)用的是circle.draw()l在程序運(yùn)行時(shí)才進(jìn)行綁定,接下來(lái)介紹綁定的概念5.3.1 多態(tài)的目的多態(tài)的目的 一個(gè)例子一個(gè)例子多態(tài)的概念清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)445.3.2 綁定的概念綁定的概念l綁定綁定 指將一個(gè)方法調(diào)用同一個(gè)方法主體連接到一起 根據(jù)綁定時(shí)期的不同,可分為l早期綁定 程序運(yùn)行之前執(zhí)行綁定l晚期綁定 也叫作“動(dòng)態(tài)綁定”或“運(yùn)行期綁定 基于對(duì)象的類別,在程序運(yùn)行時(shí)執(zhí)行綁定多態(tài)的概念清華大學(xué) 鄭莉java語(yǔ)言程序設(shè)計(jì)45l仍以繪圖為例,所有類都放在仍以繪圖為例,所有類都放在binding包中包中 基類shape建立

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論