




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)科學(xué)技術(shù)系 李群,第13講 接口,計(jì)算機(jī)科學(xué)技術(shù)系 李群,復(fù)習(xí)與回顧,多態(tài)的定義 運(yùn)行時(shí)的多態(tài)性 在Java程序中,多態(tài)性帶給我們的好處是什么?,計(jì)算機(jī)科學(xué)技術(shù)系 李群,本章任務(wù),描述某學(xué)校的院系和教師的信息,并使用打印機(jī)打印院系與教師的詳細(xì)信息: 正確使用面向接口編程的思想 提高系統(tǒng)的可擴(kuò)展性及可維護(hù)性,計(jì)算機(jī)科學(xué)技術(shù)系 李群,掌握J(rèn)ava接口 理解Java接口與多態(tài)的關(guān)系 掌握面向接口編程的思想 掌握接口中常量的使用,本章目標(biāo),計(jì)算機(jī)科學(xué)技術(shù)系 李群,生活中的接口,電腦主板上的PCI插槽的規(guī)范就類似于Java接口,聲卡,顯卡,網(wǎng)卡,每種卡的內(nèi)部結(jié)構(gòu)都不相同,可以把聲卡、網(wǎng)卡、顯卡都插
2、在PCI插槽上,而不用擔(dān)心哪個(gè)插槽是專門(mén)插哪個(gè)卡的,主板,計(jì)算機(jī)科學(xué)技術(shù)系 李群,什么是Java接口 2-1,一個(gè)Java接口是一些方法特征的集合,但沒(méi)有方法的實(shí)現(xiàn),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接口中定義的方法在不同的地方被實(shí)現(xiàn),可
3、以具有完全不同的行為,這是Java接口,相當(dāng)于主板上的PCI插槽的規(guī)范,class NetworkCard implements PCI public void start() System.out.println(Send.); public void stop() System.out.println(Network stop!); ,聲卡、網(wǎng)卡都遵守了PCI插槽的規(guī)范,但行為完全不同,計(jì)算機(jī)科學(xué)技術(shù)系 李群,什么是Java接口 2-2,public class Assembler public static void main(String args) PCI nc = new Netw
4、orkCard(); PCI sc = new SoundCard(); nc.start(); sc.start(); ,可以使用Java接口標(biāo)識(shí)類型 運(yùn)行時(shí),根據(jù)實(shí)際創(chuàng)建的對(duì)象類型調(diào)用相應(yīng)的方法實(shí)現(xiàn),Du du. Send.,控制臺(tái)輸出,2,1,計(jì)算機(jī)科學(xué)技術(shù)系 李群,為什么需要Java接口 5-1,為某學(xué)校的各院系開(kāi)發(fā)這樣一個(gè)小系統(tǒng),包含類型:教師、院系、打印機(jī),具體要求如下: 教師、以及院系都具有方法:輸出詳細(xì)信息 院系具有屬性:打印機(jī),能夠通過(guò)院系的打印機(jī)打印教師或院系的詳細(xì)信息 系統(tǒng)要具備良好的可擴(kuò)展性與可維護(hù)性,打印,教師,院系,教師詳細(xì)信息,院系詳細(xì)信息,detail方法 (輸
5、出詳細(xì)信息),計(jì)算機(jī)科學(xué)技術(shù)系 李群,為什么需要Java接口 5-2,以下這個(gè)解決方案中存在著什么問(wèn)題?,public class Teacher /輸出教員的詳細(xì)信息 public String detail() return “本人是教師; ,public class Department private Printer printer = new Printer(); /輸出院系的詳細(xì)信息 public String detail() return “這里是院系; /使用打印機(jī)打印教師信息 public void print(Teacher t) printer.print(t.deta
6、il(); /使用打印機(jī)打印院系信息 public void print(Department d) printer.print(d.detail(); ,public class Printer public void print(String content) System.out.println(開(kāi)始打印:); System.out.println(content); ,每增加一種新類型,都需增加相應(yīng)的print(新增類型名 obj)方法 程序的可擴(kuò)展性及可維護(hù)性極差 這不符合系統(tǒng)的要求,計(jì)算機(jī)科學(xué)技術(shù)系 李群,為什么需要Java接口 5-3,可以通過(guò)多態(tài)性解決這個(gè)問(wèn)題嗎?,顯然,本系統(tǒng)
7、符合使用多態(tài)性的條件,教師,院系,detail方法 (負(fù)責(zé)輸出詳細(xì)信息),教師詳細(xì)信息,院系詳細(xì)信息,1,2,2,1,回顧多態(tài)的含義: 實(shí)現(xiàn)同一個(gè)接口,使用不同的實(shí)例而執(zhí)行不同操作,計(jì)算機(jī)科學(xué)技術(shù)系 李群,為什么需要Java接口 5-4,在這個(gè)系統(tǒng)中,存在繼承關(guān)系嗎? 教師、院系屬于兩種不同的類型,無(wú)法通過(guò)“is-a”找到一個(gè)合適的父類 教師、院系都存在一個(gè)共同的方法特征:detail,它們對(duì)detail方法有各自不同的實(shí)現(xiàn)這完全符合Java接口的定義,定義一個(gè)Java接口,在其中定義detail方法,但沒(méi)有具體實(shí)現(xiàn),實(shí)現(xiàn)這個(gè)Java接口,不同的類對(duì)detail方法有不同的具體實(shí)現(xiàn),計(jì)算機(jī)科學(xué)
8、技術(shù)系 李群,為什么需要Java接口 5-5,public interface Introduceable public String detail(); ,public class Department implements Introduceable private Printer printer = new Printer(); /輸出中心的詳細(xì)信息 public String detail() return “這里是院系; /使用院系打印機(jī)打印信息 public void print(Introduceable intro) printer.print(intro.detail();
9、,public class Teacher implements Introduceable /輸出教師的詳細(xì)信息 public String detail() return “本人是教師; ,通過(guò)Java接口,我們同樣可以享受到多態(tài)性的好處,大大提高了程序的可擴(kuò)展性及可維護(hù)性,使用print方法時(shí),參數(shù)可以是任何Introduceable接口的實(shí)現(xiàn)類的對(duì)象,不必再為不同的類型建立不同的print方法了,使用了Java接口之后,這個(gè)系統(tǒng)有了怎樣的改進(jìn)?,計(jì)算機(jī)科學(xué)技術(shù)系 李群,小結(jié) 1,為剛才完成的系統(tǒng)增加一種新的類型:學(xué)生(Student),具體要求如下: 學(xué)生具有detail方法,負(fù)責(zé)輸出
10、學(xué)生詳細(xì)信息 能夠通過(guò)院系的打印機(jī)打印學(xué)生的詳細(xì)信息 系統(tǒng)要具備良好的可擴(kuò)展性與可維護(hù)性 編寫(xiě)測(cè)試類StudentTest進(jìn)行測(cè)試,要求: 通過(guò)院系的打印機(jī)打印學(xué)生的詳細(xì)信息,計(jì)算機(jī)科學(xué)技術(shù)系 李群,什么是面向接口編程,開(kāi)發(fā)系統(tǒng)時(shí),主體構(gòu)架使用接口,接口構(gòu)成系統(tǒng)的骨架 這樣就可以通過(guò)更換接口的實(shí)現(xiàn)類來(lái)更換系統(tǒng)的實(shí)現(xiàn),public class Department implements Introduceable private Printer printer = new Printer(); public String detail() return “這里是院系; /使用院系打印機(jī)打印信 p
11、ublic void print(Introduceable intro) printer.print(intro.detail(); ,Introduceable,Teacher (教師),Department (院系),計(jì)算機(jī)科學(xué)技術(shù)系 李群,面向接口編程的示例 4-1,升級(jí)上述的系統(tǒng),要求: 打印機(jī)有多種類型,比如:黑白打印機(jī)、彩色打印機(jī)等 院系可能配備其中任意一款打印機(jī),負(fù)責(zé)打印教師、或者院系的詳細(xì)信息 系統(tǒng)要具備良好的可擴(kuò)展性與可維護(hù)性,print方法 (打?。?彩色打印機(jī),黑白打印機(jī),黑白內(nèi)容,院系/教師 詳細(xì)信息,彩色內(nèi)容,計(jì)算機(jī)科學(xué)技術(shù)系 李群,面向接口編程的示例 4-2,采用
12、面向接口編程的方式實(shí)現(xiàn),以下是三個(gè)步驟中的第一步:,抽象出Java接口 1、分析: 黑白、彩色打印機(jī)都存在一個(gè)共同的方法特征:print 黑白、彩色打印機(jī)對(duì)print方法有各自不同的實(shí)現(xiàn) 2、結(jié)論: 抽象出Java接口PrinterFace,在其中定義方法print 3、具體實(shí)現(xiàn):,public interface PrinterFace public void print(String content); ,計(jì)算機(jī)科學(xué)技術(shù)系 李群,面向接口編程的示例 4-3,以下是三個(gè)步驟中的第二步:,public class ColorPrinter implements PrinterFace publ
13、ic void print(String content) System.out.println(彩色打?。?; System.out.println(content); ,public class BlackPrinter implements PrinterFace public void print(String content) System.out.println(黑白打?。?; System.out.println(content); ,實(shí)現(xiàn)Java接口 1、分析:已經(jīng)抽象出Java接口PrinterFace,并在其中定義了print方法 黑白、彩色打印機(jī)對(duì)print方法有各自不同
14、的實(shí)現(xiàn) 2、結(jié)論:黑白、彩色打印機(jī)都實(shí)現(xiàn)PrinterFace接口,各自實(shí)現(xiàn)print方法 3、具體實(shí)現(xiàn):,計(jì)算機(jī)科學(xué)技術(shù)系 李群,面向接口編程的示例 4-4,以下是三個(gè)步驟中的第三步:,使用Java接口 1、分析:主體構(gòu)架使用接口, 讓接口構(gòu)成系統(tǒng)的骨架 2、結(jié)論:更換實(shí)現(xiàn)接口的類就可以更換系統(tǒng)的實(shí)現(xiàn) 3、具體實(shí)現(xiàn):,public class Department implements Introduceable private PrinterFace printer; /打印機(jī) public void setPrinter(PrinterFace p) this.printer = p;
15、public String detail() return “這里是院系; public void print(Introduceable intro) printer.print(intro.detail(); ,public class DepartmentTest public static void main(String args) / 創(chuàng)建中心實(shí)例 Department dep=new Department(); /為該院系配備黑白打印機(jī) school.setPrinter(new BlackPrinter(); school.print(school); /為該院系配備彩色打印機(jī)
16、 school.setPrinter(new ColorPrinter(); school.print(school); ,計(jì)算機(jī)科學(xué)技術(shù)系 李群,小結(jié) 2,閱讀如下Java代碼,然后請(qǐng)采用面向接口編程的思想,在空白處填寫(xiě)正確的代碼,public interface PCI void start(); void stop();,class SoundCard implements PCI public void start() System.out.println(Du du.); public void stop() System.out.println(Sound stop!); ,cla
17、ss NetworkCard implements PCI public void start() System.out.println(Send.); public void stop() System.out.println(Network stop!); ,這是Java接口,相當(dāng)于主板上的PCI插槽的規(guī)范,聲卡、網(wǎng)卡都遵守了PCI插槽的規(guī)范,但行為完全不同,計(jì)算機(jī)科學(xué)技術(shù)系 李群,小結(jié) 2,public class MainBoard public void usePCICard(_ p) p.start(); p.stop(); ,public class Assembler publ
18、ic static void main(String args) MainBoard mb=new MainBoard(); /在主板上插入網(wǎng)卡 /在主板上插入聲卡 ,提示:通過(guò)這個(gè)方法,主板上可以插入任意符合PCI插槽規(guī)范的卡,PCI nc=new NetworkCard(); mb.usePCICard(nc);,PCI sc=new SoundCard();mb.usePCICard(sc);,PCI,提示:可以通過(guò)更換實(shí)現(xiàn)接口的類來(lái)更換系統(tǒng)的實(shí)現(xiàn),計(jì)算機(jī)科學(xué)技術(shù)系 李群,為什么需要常量,生活中,一周有七天,如何用代碼表示?,public class Week private int d
19、ays = 7; public static void main(String args) Week w = new Week(); System.out.println(一周有+w.days+天); ,public class Week private int days = 7; public static void main(String args) Week w = new Week(); w.days +; System.out.println(一周有+w.days+天); ,一周有7天,控制臺(tái)輸出,然而,總有不盡人意的事情發(fā)生:,一周有8天,控制臺(tái)輸出,如何保證變量的值在運(yùn)行期無(wú)法被
20、改變?使用常量,計(jì)算機(jī)科學(xué)技術(shù)系 李群,什么是常量,常量是一種標(biāo)識(shí)符,它的值在運(yùn)行期間恒定不變 常量標(biāo)識(shí)符在程序中只能被引用,而不能被重新賦值,計(jì)算機(jī)科學(xué)技術(shù)系 李群,常量的優(yōu)點(diǎn),如果不使用常量,直接在程序中填寫(xiě)數(shù)字或字符串,將會(huì)有什么麻煩?,public static double toRadians(double ang) return ang / 180.0 * 3.14159265358979323846; public static double toDegrees(double ang) return ang * 180.0 / 3.14159265358979323846; ,p
21、ublic static final double PI = 3.14159265358979323846; / 圓周率 public static double toRadians(double ang) return ang / 180.0 * PI; public static double toDegrees(double ang) return ang * 180.0 / PI; ,程序的可讀性變差:用戶很難理解數(shù)字或字符串的意思,程序的可維護(hù)性變差:如果數(shù)值改變,則需要在很多地方改動(dòng),既麻煩又易出錯(cuò),使用常量可以增強(qiáng)程序的可讀性、可維護(hù)性,計(jì)算機(jī)科學(xué)技術(shù)系 李群,Java中常量的定義規(guī)則,加入final 關(guān)鍵字代表常量, 加入static 關(guān)鍵字代表類變量 盡量使用含義直觀的常量來(lái)表示那些將在程序中多次出現(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) S
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中職化學(xué)教學(xué)課件
- 2025版協(xié)同辦公企業(yè)辦公自動(dòng)化與協(xié)同服務(wù)平臺(tái)合同
- 2025年白酒原料進(jìn)口合同
- 二零二五年度白灰行業(yè)國(guó)際市場(chǎng)拓展購(gòu)銷合同模板
- 二零二五年度精城市綠化工程承包合同范本
- 2025年度白酒線上電商平臺(tái)合作銷售合同范本
- 2025版GRG裝飾施工項(xiàng)目人才引進(jìn)與培養(yǎng)合同
- 2025版建筑工地安全監(jiān)控服務(wù)合同樣本
- 2025年度網(wǎng)絡(luò)安全風(fēng)險(xiǎn)防范與應(yīng)急預(yù)案服務(wù)合同
- 河南省事業(yè)單位二零二五年度100人招聘合同范本發(fā)布通知
- 中小學(xué)校長(zhǎng)管理案例
- 《電力設(shè)施治安安全風(fēng)險(xiǎn)等級(jí)和安全防護(hù)要求》
- 工程項(xiàng)目部安全生產(chǎn)治本攻堅(jiān)三年行動(dòng)實(shí)施方案
- 四川建筑安全員-C證考試(專職安全員)題庫(kù)及答案
- 光伏驗(yàn)收?qǐng)?bào)告
- 職業(yè)倦怠量表MBI-HSS
- 學(xué)校桌椅采購(gòu)?fù)稑?biāo)方案
- 盤(pán)扣式外腳手架施工方案
- 初中數(shù)學(xué)目錄(浙教版)
- 呼吸衰竭搶救流程
- 慰問(wèn)品采購(gòu)?fù)稑?biāo)方案(完整技術(shù)標(biāo))
評(píng)論
0/150
提交評(píng)論