JAVA 面向對象的Java實現-接口_第1頁
JAVA 面向對象的Java實現-接口_第2頁
JAVA 面向對象的Java實現-接口_第3頁
JAVA 面向對象的Java實現-接口_第4頁
JAVA 面向對象的Java實現-接口_第5頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1面向對象的Java實現-接口第八章第八章2回顧舉例說明在什么樣的情況下,需要使用到繼承?舉例說明在什么樣的情況下,需要使用到繼承?在在Java程序中,多態性帶給我們的好處是什么?程序中,多態性帶給我們的好處是什么?3預習檢查q 什么是常量?什么是常量?Java中,常量的定義規則有哪些?中,常量的定義規則有哪些?q 什么是面向接口編程,它的好處是什么?什么是面向接口編程,它的好處是什么?4本章任務升級升級HelloACCP,打印,打印ACCP中心與教員的詳細信中心與教員的詳細信息:息:正確使用面向接口編程的思想正確使用面向接口編程的思想提高系統的可擴展性及可維護性提高系統的可擴展性及可維護性5

2、掌握掌握Java接口接口理解理解Java接口與多態的關系接口與多態的關系掌握面向接口編程的思想掌握面向接口編程的思想掌握常量接口的使用掌握常量接口的使用本章目標6生活中的接口電腦主板上的電腦主板上的PCI插槽的規范就類似于插槽的規范就類似于Java接口接口 聲卡聲卡顯卡顯卡網卡網卡每種卡的內部結構都不相同,可以把聲卡、每種卡的內部結構都不相同,可以把聲卡、網卡、顯卡都插在網卡、顯卡都插在PCI插槽上,而不用擔心哪插槽上,而不用擔心哪個插槽是專門插哪個卡的個插槽是專門插哪個卡的主板主板7什么是Java接口 2-1一個一個Java接口是一些方法特征的集合,但沒有方法的實現接口是一些方法特征的集合,

3、但沒有方法的實現public interface PCI public void start(); public void stop();class SoundCard implements PCI public void start() System.out.println(Du du.); public void stop() System.out.println(Sound stop!); Java接口中定義的方法在不同的地方被實現,可以具有接口中定義的方法在不同的地方被實現,可以具有完全不同的行為完全不同的行為這是這是Java接口,相當于主接口,相當于主板上的板上的PCI插槽的規范插槽

4、的規范class NetworkCard implements PCI public void start() System.out.println(Send.); public void stop() System.out.println(Network stop!); 聲卡、網卡都實現了聲卡、網卡都實現了PCI插槽的規范,但行為完全不同插槽的規范,但行為完全不同 8什么是Java接口 2-2public class Assembler public static void main(String args) PCI nc = new NetworkCard(); PCI sc = new

5、SoundCard(); nc.start(); sc.start(); q 可以使用可以使用Java接口標識類型接口標識類型q 運行時,根據實際創建的對象類型調用相應的方法實現運行時,根據實際創建的對象類型調用相應的方法實現Du du.Send.控制臺輸出控制臺輸出219為什么需要Java接口 5-1為為ACCP各中心開發這樣一個小系統,包含類各中心開發這樣一個小系統,包含類型:教員、中心、打印機,具體要求如下:型:教員、中心、打印機,具體要求如下:教員、以及中心都具有方法:輸出詳細信息教員、以及中心都具有方法:輸出詳細信息中心具有屬性:打印機,能夠通過中心的打印機打印教員或中中心具有屬性:

6、打印機,能夠通過中心的打印機打印教員或中心的詳細信息心的詳細信息系統要具備良好的可擴展性與可維護性系統要具備良好的可擴展性與可維護性打印打印 教員教員 中心中心 教員教員詳細信息詳細信息中心中心詳細信息詳細信息detail方法方法(輸出詳細信息)(輸出詳細信息)10為什么需要Java接口 5-2以下這個解決方案中存在著什么問題?以下這個解決方案中存在著什么問題?public class AccpTeacher1 /輸出教員的詳細信息輸出教員的詳細信息public String detail() return 本人是本人是ACCP教員教員;public class AccpSchool1 pri

7、vate Printer printer = new Printer(); /輸出中心的詳細信息輸出中心的詳細信息public String detail() return 這里是這里是ACCP中心中心;/使用打印機打印教員信息使用打印機打印教員信息public void print(AccpTeacher1 t)printer.print(t.detail();/使用打印機打印中心信息使用打印機打印中心信息public void print(AccpSchool1 s)printer.print(s.detail();public class Printer public void prin

8、t(String content) System.out.println(開始打印:開始打印:);System.out.println(content);每增加一種新類型,都需要增加相應的每增加一種新類型,都需要增加相應的print(類型名稱類型名稱 var)方法方法程序的可擴展性及可維護性極差程序的可擴展性及可維護性極差這不符合系統的要求這不符合系統的要求11為什么需要Java接口 5-3可以通過多態性解決這個問題嗎可以通過多態性解決這個問題嗎?顯然,本系統符合使用多態性的條件顯然,本系統符合使用多態性的條件教員教員 中心中心 detail方法方法(負責輸出詳細信息)(負責輸出詳細信息)教員

9、教員詳細信息詳細信息中心中心詳細信息詳細信息1221 回顧多態的含義:回顧多態的含義:實現同一個接口,使用不同的實例而執行不同操作實現同一個接口,使用不同的實例而執行不同操作12為什么需要Java接口 5-4在這個系統中,存在繼承關系嗎?在這個系統中,存在繼承關系嗎?教員、中心屬于兩種不同的類型,無法通過教員、中心屬于兩種不同的類型,無法通過“is-a”找到一個合適找到一個合適的父類的父類教員、中心都存在一個共同的方法特征:教員、中心都存在一個共同的方法特征:detail,它們對,它們對detail方法有各自不同的實現方法有各自不同的實現這完全符合這完全符合Java接口的接口的定義定義定義一個

10、定義一個Java接口,在其中定義接口,在其中定義detail方法,但沒有具體實現方法,但沒有具體實現實現這個實現這個Java接口,不同的類對接口,不同的類對detail方法有不同的具體實現方法有不同的具體實現IntroduceableAccpTeacher2(教員教員)AccpSchool2(中心中心)13為什么需要Java接口 5-5public interface Introduceable public String detail();public class AccpSchool2 implements Introduceable private Printer printer = n

11、ew Printer(); /輸出中心的詳細信息輸出中心的詳細信息public String detail() return 這里是這里是ACCP中心中心;/使用中心打印機打印信息使用中心打印機打印信息public void print(Introduceable intro) printer.print(intro.detail();public class AccpTeacher2 implements Introduceable /輸出教員的詳細信息輸出教員的詳細信息public String detail() return 本人是本人是ACCP教員教員;通過通過Java接口,我們同樣可

12、以享受到多態性的好處,大大提高了接口,我們同樣可以享受到多態性的好處,大大提高了程序的可擴展性及可維護性程序的可擴展性及可維護性 使用使用print方法時,參數可以是任何方法時,參數可以是任何Introduceable接口的實現類接口的實現類的對象,不必再為不同的類型建立不同的的對象,不必再為不同的類型建立不同的print方法了方法了使用了使用了Java接口之后,這個系統有了怎樣的改進?接口之后,這個系統有了怎樣的改進?14小結 1為剛才完成的系統增加一種新的類型:學員為剛才完成的系統增加一種新的類型:學員(AccpStudent),具體要求如下:),具體要求如下:學員具有學員具有detail

13、方法,負責輸出學員詳細信息方法,負責輸出學員詳細信息能夠通過中心的打印機打印學員的詳細信息能夠通過中心的打印機打印學員的詳細信息系統要具備良好的可擴展性與可維護性系統要具備良好的可擴展性與可維護性編寫測試類編寫測試類StudentTest進行測試,要求:進行測試,要求:通過中心的打印機打印學員的詳細信息通過中心的打印機打印學員的詳細信息StudentTest完整代碼實現完整代碼實現AccpStudent完整代碼實現完整代碼實現15作業問題:問題:類:類:鼠標鼠標 (mouse)打印機打印機(printer)U盤盤(UDisk)電腦電腦(computer)接口:接口:USB接口接口(USB)16

14、什么是面向接口編程開發系統時,主體構架使用接口,接口構成系統的骨架開發系統時,主體構架使用接口,接口構成系統的骨架這樣就可以通過更換接口的實現類來更換系統的實現這樣就可以通過更換接口的實現類來更換系統的實現public class AccpSchool2 implements Introduceable private Printer printer = new Printer();public String detail() return 這里是這里是ACCP中心中心;/使用中心打印機打印信息使用中心打印機打印信息public void print(Introduceable intro)

15、printer.print(intro.detail();IntroduceableAccpTeacher2(教員教員)AccpSchool2(中心中心)17面向接口編程的示例 4-1升級上述的升級上述的ACCP系統,要求:系統,要求:打印機有多種類型,比如:黑白打印機、彩色打印機等打印機有多種類型,比如:黑白打印機、彩色打印機等中心可能配備其中任意一款打印機,負責打印教員、或者中心中心可能配備其中任意一款打印機,負責打印教員、或者中心的詳細信息的詳細信息系統要具備良好的可擴展性與可維護性系統要具備良好的可擴展性與可維護性print方法方法 (打印)(打印) 彩色打印機彩色打印機 黑白打印機黑

16、白打印機 黑白內容黑白內容中心中心/教員教員 詳細信息詳細信息 彩色內容彩色內容18面向接口編程的示例 4-2采用面向接口編程的方式實現,以下是三個步驟中的第一步:采用面向接口編程的方式實現,以下是三個步驟中的第一步:q 抽象出抽象出Java接口接口1、分析:、分析:黑白、彩色打印機都存在一個共同的方法特征:黑白、彩色打印機都存在一個共同的方法特征:print黑白、彩色打印機對黑白、彩色打印機對print方法有各自不同的實現方法有各自不同的實現2、結論:、結論:抽象出抽象出Java接口接口PrinterFace,在其中定義方法,在其中定義方法print3、具體實現:、具體實現:public i

17、nterface PrinterFace public void print(String content);19面向接口編程的示例 4-3采用面向接口編程的方式實現,以下是三個步驟中的第二步:采用面向接口編程的方式實現,以下是三個步驟中的第二步:public class ColorPrinter implements PrinterFace public void print(String content) System.out.println(彩色打印:彩色打印:); System.out.println(content); public class BlackPrinter implem

18、ents PrinterFace public void print(String content) System.out.println(黑白打印:黑白打印:); System.out.println(content); q 實現實現Java接口接口1、分析:分析:已經抽象出已經抽象出Java接口接口PrinterFace,并在其中定義了,并在其中定義了print方法方法黑白、彩色打印機對黑白、彩色打印機對print方法有各自不同的實現方法有各自不同的實現2、結論:、結論:黑白、彩色打印機都實現黑白、彩色打印機都實現PrinterFace接口,各自實現接口,各自實現print方法方法3、具體

19、實現:、具體實現:20面向接口編程的示例 4-4采用面向接口編程的方式實現,以下是三個步驟中的第三步:采用面向接口編程的方式實現,以下是三個步驟中的第三步:q 使用使用Java接口接口1、分析:分析:主體構架使用接口主體構架使用接口, 讓接口構成系統的骨架讓接口構成系統的骨架2、結論:、結論:更換實現接口的類就可以更換系統的實現更換實現接口的類就可以更換系統的實現3、具體實現:、具體實現:public class AccpSchool3 implements Introduceable private PrinterFace printer; /打印機打印機 public void setPr

20、inter(PrinterFace p) this.printer = p; public String detail() return 這里是這里是ACCP中心中心; public void print(Introduceable intro) printer.print(intro.detail(); public class AccpTest public static void main(String args) / 創建中心實例創建中心實例 AccpSchool3 school=new AccpSchool3(); /為該中心配備黑白打印機為該中心配備黑白打印機 school.set

21、Printer(new BlackPrinter(); school.print(school); /為該中心配備彩色打印機為該中心配備彩色打印機 school.setPrinter(new ColorPrinter(); school.print(school); 21小結 2閱讀如下閱讀如下Java代碼,然后請采用面向接口編代碼,然后請采用面向接口編程的思想,在空白處填寫正確的代碼程的思想,在空白處填寫正確的代碼public interface PCI void start(); void stop();class SoundCard implements PCI public void

22、start() System.out.println(Du du.); public void stop() System.out.println(Sound stop!); class NetworkCard implements PCI public void start() System.out.println(Send.); public void stop() System.out.println(Network stop!); 這是這是Java接口,相當于主接口,相當于主板上的板上的PCI插槽的規范插槽的規范聲卡、網卡都實現了聲卡、網卡都實現了PCI插槽的規范,但行為完全不同插槽的

23、規范,但行為完全不同22小結 2public class MainBoard public void usePCICard(_ p) p.start(); p.stop(); public class Assembler public static void main(String args) MainBoard mb=new MainBoard(); /在主板上插入網卡在主板上插入網卡 /在主板上插入聲卡在主板上插入聲卡 提示:通過這個方法,主板上提示:通過這個方法,主板上可以插入任意符合可以插入任意符合PCI插槽規插槽規范的卡范的卡PCI nc=new NetworkCard();mb.u

24、sePCICard(nc); PCI sc=new SoundCard(); mb.usePCICard(sc);PCI提示:可以通過更換實現接口的類提示:可以通過更換實現接口的類來更換系統的實現來更換系統的實現23為什么需要常量生活中,一周有七天,如何用代碼表示?生活中,一周有七天,如何用代碼表示?public class Week private int days = 7;public static void main(String args) Week w = new Week();System.out.println(一周有一周有+w.days+天天);public class Wee

25、k private int days = 7;public static void main(String args) Week w = new Week();w.days +;System.out.println(一周有一周有+w.days+天天);一周有一周有7天天控制臺輸出控制臺輸出然而,總有不盡人意的事情發生:然而,總有不盡人意的事情發生:一周有一周有8天天控制臺輸出控制臺輸出如何保證變量的值在運行期無法被改變?如何保證變量的值在運行期無法被改變?使用常量使用常量 24什么是常量常量是一種標識符,它的值在運行期間恒定不變常量是一種標識符,它的值在運行期間恒定不變常量標識符在程序中只能被

26、引用,而不能被重新賦值常量標識符在程序中只能被引用,而不能被重新賦值常量常量圓周率圓周率PI圓周率圓周率PI代碼代碼表示方表示方式式public static final double PI = 3.14159265358979323846;用法用法將將ang角度轉換成徑度角度轉換成徑度 public static double toRadians(double ang) return ang / 180.0 * PI;25常量的優點如果不使用常量,直接在程序中填寫數字或字符串,將會如果不使用常量,直接在程序中填寫數字或字符串,將會有什么麻煩?有什么麻煩?public static doubl

27、e 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;public static

28、double toDegrees(double ang) return ang * 180.0 / PI;程序的可讀性變差:用程序的可讀性變差:用戶很難理解數字或字符戶很難理解數字或字符串的意思串的意思程序的可維護性變差:如程序的可維護性變差:如果數值改變,則需要在很果數值改變,則需要在很多地方改動,既麻煩又易多地方改動,既麻煩又易出錯出錯使用常量可以增強程序的可讀性、可維護性使用常量可以增強程序的可讀性、可維護性26Java中常量的定義規則加入加入final 關鍵字代表常量,關鍵字代表常量, 加入加入static 關鍵字代表類變量關鍵字代表類變量盡量使用含義直觀的常量來表示那些將在程序中多次

29、出現盡量使用含義直觀的常量來表示那些將在程序中多次出現的數字或字符串的數字或字符串public class AccpStudent 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;27在Java接口中聲明常量在在Java 接口中聲明的變量在編譯時會自動加上接口中聲明的變量在編譯時會自動加上static final的修飾符,即聲明為常量,因而的修飾符,即聲明為常量,因而Java接口通常是存接口通常是存放常量的最佳地點放常量的最佳地點public interface AccpSchoolType public static final String ACCP = ACCP加盟中心加盟中心; public static f

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論