




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、面向?qū)ο缶幊袒A(二)面向?qū)ο缶幊袒A(二)軟件學院軟件學院代飛代飛2014.2014.春春生活中的接口生活中的接口聲卡聲卡顯卡顯卡網(wǎng)卡網(wǎng)卡每種卡的內(nèi)部結(jié)構(gòu)都不相同,可以把聲卡、每種卡的內(nèi)部結(jié)構(gòu)都不相同,可以把聲卡、網(wǎng)卡、顯卡都插在網(wǎng)卡、顯卡都插在PCI插槽上,而不用擔心哪插槽上,而不用擔心哪個插槽是專門插哪個卡的個插槽是專門插哪個卡的主板主板Java接口接口public interface PCI public void start(); public void stop();class SoundCard implements PCI public void start() System.
2、out.println(Du du.); public void stop() System.out.println(Sound stop!); Java接口中定義的方法在不同的地方被實現(xiàn),可以具有完全接口中定義的方法在不同的地方被實現(xiàn),可以具有完全不同的行為不同的行為這是這是Java接口,相當于主接口,相當于主板上的板上的PCI插槽的規(guī)范插槽的規(guī)范class NetworkCard implements PCI public void start() System.out.println(Send.); public void stop() System.out.println(Networ
3、k stop!); 聲卡、網(wǎng)卡都實現(xiàn)了聲卡、網(wǎng)卡都實現(xiàn)了PCI插槽的規(guī)范,但行為完全不同插槽的規(guī)范,但行為完全不同 基于接口的多態(tài)基于接口的多態(tài)public class Assembler public static void main(String args) PCI nc = new NetworkCard(); PCI sc = new SoundCard(); nc.start(); sc.start(); Du du.Send.控制臺輸出控制臺輸出案例案例軟件學院需開發(fā)這樣一個小系統(tǒng),包含:軟件學院、教師、系、打印機,具體要求如下:1、教師和系都具有方法:輸出詳細信息2、 軟件學院具
4、有屬性:打印機,能夠打印教師、系、軟件學院的詳細信息3、系統(tǒng)要具備良好的可擴展性與可維護性打印打印 教師教師 系系教師教師詳細信息詳細信息系系詳細信息詳細信息detail方法方法(輸出詳細信息)(輸出詳細信息)軟件學院軟件學院 public class SoftwareTeacher /輸出教師的詳細信息輸出教師的詳細信息public String detail() return “本人是本人是軟件工程系軟件工程系教師教師;public class SoftwareSchool private Printer printer = new Printer(); /輸出中心的詳細信息輸出中心的詳細
5、信息public String detail() return “這是云南大學軟件學這是云南大學軟件學院院;/使用打印機打印教師信息使用打印機打印教師信息public void print(SoftwareTeacher t)printer.print(t.detail();/使用打印機打印系信息使用打印機打印系信息public void print(SoftwareDepartment s)printer.print(s.detail();public class Printer public void print(String content) System.out.println(開始打
6、?。洪_始打?。?; System.out.println(content);每增加一種新類型,都需要增加相應的每增加一種新類型,都需要增加相應的print(類型名稱類型名稱 var)方法方法程序的可擴展性及可維護性極差程序的可擴展性及可維護性極差這不符合系統(tǒng)的要求這不符合系統(tǒng)的要求public class SoftwareDepartmentpublic String detail() return “這這是是軟件工程系軟件工程系;可以通過多態(tài)性解決這個問題嗎可以通過多態(tài)性解決這個問題嗎?如果教師和系都實現(xiàn)同一接口,接口類型的變?nèi)绻處熀拖刀紝崿F(xiàn)同一接口,接口類型的變量便可以指向教師對象,或者
7、系對象了量便可以指向教師對象,或者系對象了教師教師 系系 detail方法方法(負責輸出詳細信息)(負責輸出詳細信息)教師教師詳細信息詳細信息系系詳細信息詳細信息 回顧多態(tài)的含義:回顧多態(tài)的含義:父類型的變量(父類型的變量(reference)可以指向父對象,還可)可以指向父對象,還可以指向子對象;以指向子對象;教師、系都存在一個共同的方法特征:教師、系都存在一個共同的方法特征:detail,它們對,它們對detail方方法有各自不同的實現(xiàn)法有各自不同的實現(xiàn)這完全符合這完全符合Java接口的定義接口的定義定義一個定義一個Java接口,在其中定義接口,在其中定義detail方法,但沒有具體實現(xiàn)方
8、法,但沒有具體實現(xiàn)實現(xiàn)這個實現(xiàn)這個Java接口,不同的類對接口,不同的類對detail方法有不同的具體實現(xiàn)方法有不同的具體實現(xiàn)TeacherSoftwareTeacherNetworkTeacher定義一個定義一個Java接口,在其中定義接口,在其中定義detail方法,但沒有具體實現(xiàn)方法,但沒有具體實現(xiàn)實現(xiàn)這個實現(xiàn)這個Java接口,不同的類對接口,不同的類對detail方法有不同的具體實現(xiàn)方法有不同的具體實現(xiàn)DepartmentSoftwareDepartmentNetworkDepartmentpublic interface Teacherpublic String detail();p
9、ublic class SoftwareSchool private Printer printer = new Printer(); /輸出學院的詳細信息輸出學院的詳細信息public String detail() return “這里是軟件學院這里是軟件學院;/使用學院打印機打印教師使用學院打印機打印教師public void print(Teacher t) printer.print(t.detail();/使用學院打印機打印教師使用學院打印機打印教師public void print(Department d) printer.print(d.detail();public int
10、erface Departmentpublic String detail();通過通過Java接口,我們同樣可以享受到多態(tài)性的好處,大大提高了接口,我們同樣可以享受到多態(tài)性的好處,大大提高了程序的可擴展性及可維護性程序的可擴展性及可維護性 public class SoftwareTeacher implements Teacherpublic String detail() return “本人是軟件工程系教師本人是軟件工程系教師;public class SoftwareDepartment implements department public String detail() ret
11、urn “這這是是軟件工程系軟件工程系;接口接口F接口是一種類似于類的結(jié)構(gòu),但是接口中只能包含和。 F為了和類區(qū)別,定義接口使用下面的語法:public interface public interface 接口名接口名 extends extends 父接口列父接口列表表 常量聲明常量聲明 抽象方法抽象方法 finalfinal的用法的用法final classfinal class不能被繼承不能被繼承 final class Math final class Math . . finalfinal變量就是常量:變量就是常量: final double PI = 3.14159; final
12、 double PI = 3.14159;finalfinal方法不能被覆蓋方法不能被覆蓋什么是常量?什么是常量?常量是一種標識符,它的值在運行期間恒定不變常量標識符在程序中只能被引用,而不能被重新賦值常量圓周率PI圓周率PI代碼表示方式public static final double PI = 3.14159265358979323846;用法將ang角度轉(zhuǎn)換成徑度 public static double toRadians(double ang) return ang / 180.0 * PI;常量的優(yōu)點常量的優(yōu)點如果不使用常量,直接在程序中填寫數(shù)字或字符串,將會有什么麻煩?publ
13、ic static double toRadians(double ang) return ang / 180.0 * 3.14159265358979323846;public static double toDegrees(double ang) return ang * 180.0 / 3.14159265358979323846;public static final double PI = 3.14159265358979323846; / 圓周率圓周率public static double toRadians(double ang) return ang / 180.0 * PI
14、;public static double toDegrees(double ang) return ang * 180.0 / PI;程序的可讀性變差:用程序的可讀性變差:用戶很難理解數(shù)字或字符戶很難理解數(shù)字或字符串的意思串的意思程序的可維護性變差:如程序的可維護性變差:如果數(shù)值改變,則需要在很果數(shù)值改變,則需要在很多地方改動,既麻煩又易多地方改動,既麻煩又易出錯出錯使用常量可以增強程序的可讀性、可維護性使用常量可以增強程序的可讀性、可維護性JAVA中常量的定義規(guī)則中常量的定義規(guī)則加入final 關鍵字代表常量, 加入static 關鍵字代表類變量盡量使用含義直觀的常量來表示那些將在程序中多
15、次出現(xiàn)的數(shù)字或字符串public class Student public static final int FEMALE = 1; /代表女性代表女性public static final int MALE = 2; /代表男性代表男性private int sex; /性別性別public void setSex(int sex) if(sex=FEMALE)System.out.println(這是一名女學生這是一名女學生);else if(sex = MALE)System.out.println(這是一名男學生這是一名男學生);this.sex = sex;在在Java接口中聲明常量
16、接口中聲明常量在Java 接口中聲明的變量在編譯時會自動加上static final的修飾符,即聲明為常量,因而Java接口通常是存放常量的最佳地點public interface SoftwareSchool public static final String SoftwareEnginnering = “云南省軟件工云南省軟件工程重點實驗室程重點實驗室; public static final String CloudComputingEngineering = “云南省云南省云計算工程中心云計算工程中心; public interface SoftwareSchool String S
17、oftwareEnginnering = “云南省軟件工程重點實驗室云南省軟件工程重點實驗室; String CloudComputingEngineering = “云南省云計算工程中心云南省云計算工程中心;等同于等同于抽象方法和抽象類抽象方法和抽象類抽象方法:有方法聲明沒有方法實現(xiàn)抽象方法:有方法聲明沒有方法實現(xiàn)如果一個類中包含抽象方法,這個類就要聲明成抽象類,反之不成立如果一個類中包含抽象方法,這個類就要聲明成抽象類,反之不成立abstractabstract class Figure class Figure double dim1, dim2; double dim1, dim2;
18、Figure(double a, double b) Figure(double a, double b) dim1 = a;dim1 = a;dim2 = b;dim2 = b; abstract double getArea();/abstract double getArea();/只有方法頭,沒有方法體只有方法頭,沒有方法體 Figure f = new Figure(2,3);/Figure f = new Figure(2,3);/抽象類不能實例化抽象類不能實例化抽象類和抽象方法抽象類和抽象方法,由子類實現(xiàn)其抽象方法,否則其子類必須聲明成抽象類abstractabstract cl
19、ass Figure class Figure double dim1, dim2; double dim1, dim2; Figure(double a, double b) Figure(double a, double b) dim1 = a; dim1 = a; dim2 = b; dim2 = b; abstract double getArea();abstract double getArea();/只有方法頭,沒有方法體只有方法頭,沒有方法體 abstractabstract class Rectangle extends Figure class Rectangle exte
20、nds Figure Rectangle(double a, double b) Rectangle(double a, double b) super(a, b); super(a, b); RectangleRectangle類繼承了類繼承了FigureFigure類,但是沒有實現(xiàn)其內(nèi)部的抽象方法類,但是沒有實現(xiàn)其內(nèi)部的抽象方法,必須聲明成抽象類,必須聲明成抽象類抽象類和抽象方法抽象類和抽象方法abstractabstract class Figure class Figure double dim1, dim2; double dim1, dim2; Figure(double a, d
21、ouble b) Figure(double a, double b) dim1 = a; dim1 = a; dim2 = b; dim2 = b; abstract double getArea();abstract double getArea();/只有方法頭,沒有方法體只有方法頭,沒有方法體 class Triangle extends Figure class Triangle extends Figure Triangle(double a, double b) Triangle(double a, double b) super(a, b); super(a, b); doub
22、le getArea() double getArea() return dim1 return dim1 * * dim2 / 2; dim2 / 2; TriangleTriangle類繼承了類繼承了FigureFigure類,并且實現(xiàn)類,并且實現(xiàn)了其內(nèi)部的抽象方法了其內(nèi)部的抽象方法, ,無需聲明成抽象類無需聲明成抽象類public interface Edible public interface Edible /接口中的方法隱含接口中的方法隱含publicpublic和和abstractabstract public String howToEat(); public String h
23、owToEat(); public interface Runnable public interface Runnable public void run(); public void run(); public interface Sleepable public interface Sleepable int MAX = 100; int MAX = 100; / / 接口中的變量隱含接口中的變量隱含publicpublic,staticstatic,finalfinal public void sleep(); public void sleep(); 接口接口接口接口不能實例化不能實
24、例化可以聲明接口類型的變量,可以聲明接口類型的變量,用接口聲明出的變量是用接口聲明出的變量是引用類引用類型變量型變量new Runnable();/new Runnable();/錯誤錯誤Edible e;Edible e;Runnable rRunnable rSleepable s;Sleepable s;實現(xiàn)接口實現(xiàn)接口class Animal class Animal class Chicken extends Animal class Chicken extends Animal implements Edible,Runnableimplements Edible,Runnable
25、 public String howToEat() public String howToEat() return return 炸著吃炸著吃; public void run() public void run() System.out.println( System.out.println(兩條腿跑兩條腿跑);); public void layAnEgg() public void layAnEgg() System.out.println( System.out.println(母雞還可以生蛋母雞還可以生蛋);); 一個類可以實現(xiàn)多個接口,一個類可以實現(xiàn)多個接口,多個接口間用逗號分隔多
26、個接口間用逗號分隔實現(xiàn)接口的方法,返回類型,實現(xiàn)接口的方法,返回類型,名字,參數(shù)列表和接口中定義名字,參數(shù)列表和接口中定義的一模一樣,并且必須是的一模一樣,并且必須是publicpublic的的class Pig extends Animal implements Edible,Runnable,class Pig extends Animal implements Edible,Runnable, Sleepable Sleepable public String howToEat() public String howToEat() return return 蒸著吃,烤著吃,紅燒,燉湯等
27、等蒸著吃,烤著吃,紅燒,燉湯等等; public void run() public void run() System.out.println( System.out.println(四條腿跑四條腿跑);); public void sleep() public void sleep() System.out.println(“ System.out.println(“最喜歡睡覺最喜歡睡覺);); abstractabstract class Car implements Edible,Runnable class Car implements Edible,Runnablepublic v
28、oid run()public void run() System.out.println( System.out.println(四個輪子跑四個輪子跑);); 一個類如果聲明要實現(xiàn)一個接口,一個類如果聲明要實現(xiàn)一個接口,就必須實現(xiàn)接口中的所有方法,就必須實現(xiàn)接口中的所有方法,否則就要聲明成抽象類否則就要聲明成抽象類接口定義了行為的協(xié)議,可以被任何類實現(xiàn)。接口定義了行為的協(xié)議,可以被任何類實現(xiàn)。一個類如果聲明要實現(xiàn)一個接口,就必須實現(xiàn)接口中的一個類如果聲明要實現(xiàn)一個接口,就必須實現(xiàn)接口中的所所有有方法方法,否則就要聲明成抽象類,否則就要聲明成抽象類一個類可以實現(xiàn)多個接口,但是只能有一個父類。一
29、個類可以實現(xiàn)多個接口,但是只能有一個父類。接口的實現(xiàn)實現(xiàn)了接口的類的對象,可以賦值給該接口的變量實現(xiàn)了接口的類的對象,可以賦值給該接口的變量Edible e = new Chicken(); /okEdible e = new Chicken(); /oke. howToEat(); / ok, e. howToEat(); / ok, “炸著吃炸著吃 e. run();/wronge. run();/wrong,可以調(diào)用的方法的范圍是由變量決定的,可以調(diào)用的方法的范圍是由變量決定的e. layAnEgg(); /wronge. layAnEgg(); /wrong,同上,同上e = new
30、Car();/wrong,Care = new Car();/wrong,Car類沒有實現(xiàn)類沒有實現(xiàn)EdibleEdible接口接口Sleepable s = new Pig();/okSleepable s = new Pig();/oks.Runs.Run();();面向接口編程面向接口編程開發(fā)系統(tǒng)時,主體構(gòu)架使用接口,接口構(gòu)成系統(tǒng)的骨架這樣就可以通過更換接口的實現(xiàn)類來更換系統(tǒng)的實現(xiàn)定義一個定義一個Java接口,在其中定義接口,在其中定義detail方法,但沒有具體實現(xiàn)方法,但沒有具體實現(xiàn)實現(xiàn)這個實現(xiàn)這個Java接口,不同的類對接口,不同的類對detail方法有不同的具體實現(xiàn)方法有不同的具
31、體實現(xiàn)TeacherSoftwareTeacherNetworkTeacheru升級上述的系統(tǒng),要求:打印機有多種類型,比如:黑白打印機、彩色打印機等學院可能配備其中任意一款打印機,負責打印教師、或者系的詳細信息系統(tǒng)要具備良好的可擴展性與可維護性print方法方法 (打?。ù蛴。?彩色打印機彩色打印機 黑白打印機黑白打印機 黑白內(nèi)容黑白內(nèi)容系系/教師教師 詳細信息詳細信息 彩色內(nèi)容彩色內(nèi)容采用面向接口編程的方式實現(xiàn),以下是三個步驟中的第一步: 抽象出抽象出Java接口接口1、分析:、分析:黑白、彩色打印機都存在一個共同的方法特征:黑白、彩色打印機都存在一個共同的方法特征:print黑白、彩色
32、打印機對黑白、彩色打印機對print方法有各自不同的實現(xiàn)方法有各自不同的實現(xiàn)2、結(jié)論:、結(jié)論:抽象出抽象出Java接口接口PrinterInterface,在其中定義方法,在其中定義方法print3、具體實現(xiàn):、具體實現(xiàn):public interface PrinterInterface public void print(String content);采用面向接口編程的方式實現(xiàn),以下是三個步驟中的第二步:public class ColorPrinter implements PrinterInterface public void print(String content) System
33、.out.println(彩色打?。翰噬蛴。?; System.out.println(content); public class BlackPrinter implements PrinterInterface public void print(String content) System.out.println(黑白打?。汉诎状蛴。?; System.out.println(content); 實現(xiàn)實現(xiàn)Java接口接口1、分析:、分析:已經(jīng)抽象出已經(jīng)抽象出Java接口接口PrinterInterface,并在其中定義了,并在其中定義了print方法,黑白、彩色打印機對方法,黑白、彩色
34、打印機對print方法有各自不同的方法有各自不同的實現(xiàn)實現(xiàn)2、結(jié)論:、結(jié)論: 黑白、彩色打印機都實現(xiàn)黑白、彩色打印機都實現(xiàn)PrinterInterface接口,各自實接口,各自實現(xiàn)現(xiàn)print方法方法3、具體實現(xiàn):、具體實現(xiàn):采用面向接口編程的方式實現(xiàn),以下是三個步驟中的第三步: 使用使用Java接口接口1、分析:主體構(gòu)架使用接口、分析:主體構(gòu)架使用接口, 讓接口構(gòu)成系統(tǒng)的骨架讓接口構(gòu)成系統(tǒng)的骨架2、結(jié)論:更換實現(xiàn)接口的類就可以更換系統(tǒng)的實現(xiàn)、結(jié)論:更換實現(xiàn)接口的類就可以更換系統(tǒng)的實現(xiàn)3、具體實現(xiàn):、具體實現(xiàn):public class Softwarechool private Printer
35、Interface printer; /打印機打印機 public void setPrinter(PrinterInterface p) this.printer = p; public String detail() return “這里是云南大學軟件學院這里是云南大學軟件學院; public void print(Teacher t) printer.print(t.detail(); public void print(Department d) printer.print(d.detail(); public class Test public static void main(String args) / 創(chuàng)建學院實例創(chuàng)建學院實例 SoftwareSchool school=new SoftwareSchool();SoftwareTeacher t = new SoftwareTeacher (); /為該學院配備黑白打印機為該學院配備黑白打印機 school.setPrinter(new BlackPrinter(); school.print(t.detail(); /為該學院配備彩色打印機為該學院配備彩色打印機SoftwareDepartment d= new SoftwareDepartment();
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公路養(yǎng)護合同范本
- 人力資源外包合同范例
- 代理旗艦店合同范本
- 農(nóng)戶種植水稻合同范本
- 2024年中國移動招聘考試真題
- 個人債權(quán)抵押合同范本
- 2024年西安工業(yè)大學專任教師招聘考試真題
- 企業(yè)簽訂勞務合同范本
- 供熱站拆除合同范本
- 兼職技術總工合同范本
- 如何讓孩子積極參與家務勞動
- 2023年污水處理行業(yè)洞察報告及未來五至十年預測分析報告(修訂版)
- 小學生素質(zhì)發(fā)展報告單
- 人衛(wèi)版急診與災難醫(yī)學之呼吸困難教學課件
- 廚房油煙凈化設備日常保養(yǎng)與維護
- 拓撲數(shù)據(jù)分析理論
- (完整版)200210號文-工程勘察設計收費標準(2002年修訂本)
- 部編版語文二年級上冊第1單元核心素養(yǎng)教案
- (完整版)污水管道施工方案
- 國際法與國際爭端解決 課件全套 人大 第1-18章 導論、國際法淵源-國際人權(quán)法
- 發(fā)展?jié)h語初級口語I-第18課課件
評論
0/150
提交評論