版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java編程精要 Java接口技術(shù)福建 廈門2014年6月本章目標(biāo)本章目標(biāo)n掌握J(rèn)ava接口n理解Java接口與多態(tài)的關(guān)系n掌握面向接口編程的思想n掌握常量接口的使用本章相關(guān)詞匯本章相關(guān)詞匯單單 詞詞說說 明明interface接口,界面接口,界面implements實(shí)現(xiàn)實(shí)現(xiàn)final最終的,決定性的最終的,決定性的生活中的接口n電腦主板上的PCI插槽的規(guī)范就類似于Java接口 每種卡的內(nèi)部結(jié)構(gòu)都不相同,可以把每種卡的內(nèi)部結(jié)構(gòu)都不相同,可以把聲卡、網(wǎng)卡、顯卡都插在聲卡、網(wǎng)卡、顯卡都插在PCI插槽上,插槽上,而不用擔(dān)心哪個(gè)插槽是專門插哪個(gè)卡而不用擔(dān)心哪個(gè)插槽是專門插哪個(gè)卡的的聲卡聲卡顯卡顯卡網(wǎng)卡
2、網(wǎng)卡主板主板Java中的接口 n一個(gè)Java接口是一些方法特征的集合,但沒有方法的實(shí)現(xiàn)public interface PCI public void start(); public void stop();這是這是Java接口,相當(dāng)接口,相當(dāng)于主板上的于主板上的PCI插槽的插槽的規(guī)范規(guī)范Java中的接口 class SoundCard implements PCI public void start() System.out.println(Du du.); public void stop() System.out.println(Sound stop!); Java接口中定義的方法在不同
3、的地方被實(shí)現(xiàn),可以接口中定義的方法在不同的地方被實(shí)現(xiàn),可以具有完全不同的行為具有完全不同的行為聲卡、網(wǎng)卡都實(shí)現(xiàn)了聲卡、網(wǎng)卡都實(shí)現(xiàn)了PCI插槽的規(guī)范,但行為完全不同插槽的規(guī)范,但行為完全不同 Java中的接口 class NetworkCard implements PCI public void start() System.out.println(Send.); public void stop() System.out.println(Network stop!); 聲卡、網(wǎng)卡都實(shí)現(xiàn)了聲卡、網(wǎng)卡都實(shí)現(xiàn)了PCI插槽的規(guī)范,但行為完全不同插槽的規(guī)范,但行為完全不同 public class A
4、ssembler public static void main(String args) PCI nc = new NetworkCard(); PCI sc = new SoundCard(); nc.start(); sc.start(); Java接口可以用于定義數(shù)據(jù)接口可以用于定義數(shù)據(jù)運(yùn)行時(shí),根據(jù)實(shí)際創(chuàng)建的對(duì)象類型調(diào)用相應(yīng)的方運(yùn)行時(shí),根據(jù)實(shí)際創(chuàng)建的對(duì)象類型調(diào)用相應(yīng)的方法實(shí)現(xiàn)法實(shí)現(xiàn)Du du.Send.控制臺(tái)輸出控制臺(tái)輸出Java中的接口 n為各學(xué)校開發(fā)這樣一個(gè)小系統(tǒng),包含類型:教員、學(xué)校、打印機(jī),具體要求如下:教員、以及學(xué)校都具有方法:返回詳細(xì)信息學(xué)校具有方法:打印,能夠通過學(xué)校的打
5、印機(jī)打印教員或?qū)W校的詳細(xì)信息系統(tǒng)要具備良好的可擴(kuò)展性與可維護(hù)性打印打印 教員教員 學(xué)校學(xué)校 教員教員詳細(xì)信息詳細(xì)信息學(xué)校學(xué)校詳細(xì)信息詳細(xì)信息detail方法方法(輸出詳細(xì)信息)(輸出詳細(xì)信息)Java中的接口 n假設(shè)一個(gè)系統(tǒng)中包含三個(gè)類:教師(Teacher)、學(xué)校(School)、打印機(jī)(Printer),具有如下要求:教員和學(xué)校都具有方法tell,用于返回信息打印機(jī)能夠?qū)W(xué)校或教員返回的信息輸出Java中的接口 打印打印 教員教員 學(xué)校學(xué)校 教員教員信息信息學(xué)校學(xué)校信息信息tell方法方法public class Teacher public String tell() return 本人
6、是教員本人是教員;public class School public String tell() return 這里是學(xué)校這里是學(xué)校;public class Printer public void print(Teacher t) System.out.println(t.tell); public void print(School s) System.out.println(s.tell); 每增加一種新類型,每增加一種新類型,都需要增加相應(yīng)的都需要增加相應(yīng)的print(類型名稱類型名稱 var)方法方法n可以使用多態(tài)來解決這個(gè)問題嗎?可以使用多態(tài)來解決這個(gè)問題嗎?教員教員 學(xué)校學(xué)校
7、tell方法方法教員教員信息信息學(xué)校學(xué)校信息信息1221兩個(gè)類具有同名方法,但具體實(shí)現(xiàn)不同,應(yīng)根據(jù)具體的實(shí)例決定使用哪個(gè)tell方法滿足使用多態(tài)的條件,但教員與學(xué)校兩個(gè)類不存在共性,不適合由同一個(gè)基類派生教員、學(xué)校都存在一個(gè)共同的方法tell,它們對(duì)該方法有各自不同的實(shí)現(xiàn)這完全符合Java接口的定義定義一個(gè)定義一個(gè)Java接口,在接口,在其中定義其中定義tell方法,但沒方法,但沒有具體實(shí)現(xiàn)有具體實(shí)現(xiàn)實(shí)現(xiàn)這個(gè)實(shí)現(xiàn)這個(gè)Java接口,不接口,不同的類對(duì)同的類對(duì)tell方法有不同方法有不同的具體實(shí)現(xiàn)的具體實(shí)現(xiàn)IntroduceableTeacher(教員教員)School(學(xué)校學(xué)校)public c
8、lass Teacher implements Introduceablepublic String tell() return 本人是教員本人是教員;public class School implements Introduceable public String tell() return 這里是學(xué)校這里是學(xué)校;public interface Introduceable public String tell();public class Printer public void print(Introduceable intro) System.out.println(intro.tel
9、l);n使用print方法時(shí),參數(shù)可以是任何Introduceable接口的實(shí)現(xiàn)類的對(duì)象,不必再為不同的類型建立不同的print方法了n通過Java接口,我們同樣可以享受到多態(tài)性的好處,大大提高了程序的可擴(kuò)展性及可維護(hù)性nJava接口允許多重實(shí)現(xiàn)(即一個(gè)類同時(shí)實(shí)現(xiàn)多個(gè)接口)編程練習(xí)n為剛才完成的系統(tǒng)增加一種新的類型:學(xué)員(Student),具體要求如下:學(xué)員具有tell方法,負(fù)責(zé)輸出學(xué)員信息能夠通過學(xué)校的打印機(jī)打印學(xué)員的信息n編寫測(cè)試類進(jìn)行測(cè)試InterfaceDemo.java面向接口編程n開發(fā)系統(tǒng)時(shí),主體構(gòu)架使用接口,接口構(gòu)成系統(tǒng)的骨架n這樣就可以通過更換接口的實(shí)現(xiàn)類來更換系統(tǒng)的實(shí)現(xiàn)Int
10、roduceableTeacher(教員教員)School(學(xué)校學(xué)校)面向接口編程 升級(jí)上述的系統(tǒng),要求: 打印機(jī)有多種類型,比如:黑白打印機(jī)、彩色打印機(jī)等 學(xué)??赡芘鋫淦渲腥我庖豢畲蛴C(jī),負(fù)責(zé)打印學(xué)校的詳細(xì)信息print方法方法 (打印)(打?。?彩色打印機(jī)彩色打印機(jī) 黑白打印機(jī)黑白打印機(jī) 黑白內(nèi)容黑白內(nèi)容學(xué)校學(xué)校/教員教員 詳細(xì)信息詳細(xì)信息 彩色內(nèi)容彩色內(nèi)容抽象出Java接口(1)分析:黑白、彩色打印機(jī)都存在一個(gè)共同的方法特征print;黑白、彩色打印機(jī)對(duì)print方法有各自不同的實(shí)現(xiàn)(2)結(jié)論抽象出Java接口PrinterInf,在其中定義方法print(3)具體實(shí)現(xiàn):public i
11、nterface PrinterInf public void print(String content);面向接口編程實(shí)現(xiàn)Java接口(1)分析:已經(jīng)抽象出Java接口PrinterInf,并在其中定義了print方法黑白、彩色打印機(jī)對(duì)print方法有各自不同的實(shí)現(xiàn)(2)結(jié)論:黑白、彩色打印機(jī)都實(shí)現(xiàn)PrinterInf接口,各自實(shí)現(xiàn)print方法(3)具體實(shí)現(xiàn):面向接口編程public class ColorPrinter implements PrinterInf public void print(String content) System.out.println(彩色打?。翰噬蛴。?/p>
12、); System.out.println(content); public class BlackPrinter implements PrinterInf public void print(String content) System.out.println(黑白打?。汉诎状蛴。?; System.out.println(content); 使用Java接口更換實(shí)現(xiàn)接口的類就可以更換系統(tǒng)的實(shí)現(xiàn)面向接口編程public class School private PrinterInf printer; /打印機(jī)打印機(jī) public void setPrinter(PrinterInf p)
13、this.printer = p; public void print() printer.print(廈門理工學(xué)院廈門理工學(xué)院 ); 面向接口編程public class Test public static void main(String args) / 創(chuàng)建學(xué)校實(shí)例創(chuàng)建學(xué)校實(shí)例 School school=new School(); /為該學(xué)校配備黑白打印機(jī)為該學(xué)校配備黑白打印機(jī) school.setPrinter(new BlackPrinter(); school.print(school); /為該學(xué)校配備彩色打印機(jī)為該學(xué)校配備彩色打印機(jī) school.setPrinter(ne
14、w ColorPrinter(); school.print(school); 代碼閱讀閱讀如下Java代碼,然后請(qǐng)采用面向接口編程的思想,在空白處填寫正確的代碼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!); class NetworkCard implements PCI public v
15、oid start() System.out.println(Send.); public void stop() System.out.println(Network stop!); 這是這是Java接口,相當(dāng)于主接口,相當(dāng)于主板上的板上的PCI插槽的規(guī)范插槽的規(guī)范聲卡、網(wǎng)卡都實(shí)現(xiàn)了聲卡、網(wǎng)卡都實(shí)現(xiàn)了PCI插槽的規(guī)范,但行為完全不同插槽的規(guī)范,但行為完全不同public class MainBoard public void usePCICard(_ p) p.start(); p.stop(); public class Assembler public static void main(
16、String args) MainBoard mb=new MainBoard(); /在主板上插入網(wǎng)卡在主板上插入網(wǎng)卡 /在主板上插入聲卡在主板上插入聲卡 提示:通過這個(gè)方法,主板上提示:通過這個(gè)方法,主板上可以插入任意符合可以插入任意符合PCI插槽規(guī)插槽規(guī)范的卡范的卡PCI nc=new NetworkCard();mb.usePCICard(nc); PCI sc=new SoundCard(); mb.usePCICard(sc);PCI提示:可以通過更換實(shí)現(xiàn)接口的類提示:可以通過更換實(shí)現(xiàn)接口的類來更換系統(tǒng)的實(shí)現(xiàn)來更換系統(tǒng)的實(shí)現(xiàn)代碼閱讀常量概述n生活中,一周有七天,如何用代碼表示?pu
17、blic class Week private int days = 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)輸出控制臺(tái)輸出 然而,總有不盡
18、人意的事情發(fā)生:一周有一周有8天天控制臺(tái)輸出控制臺(tái)輸出如何保證變量的值在運(yùn)行期無法被改變?如何保證變量的值在運(yùn)行期無法被改變?使用常量使用常量 n常量是一種標(biāo)識(shí)符,它的值在運(yùn)行期間恒定不變n常量標(biāo)識(shí)符在程序中只能被引用,而不能被重新賦值常量常量圓周率圓周率PI圓周率圓周率PI代碼表示代碼表示方式方式public static final double PI = 3.14159265358979323846;用法用法將將ang角度轉(zhuǎn)換成徑度角度轉(zhuǎn)換成徑度 public static double toRadians(double ang) return ang / 180.0 * PI;常量概述
19、n如果不使用常量,直接在程序中填寫數(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;public static final double PI = 3.14159265358979323846; / 圓周率圓周率public static double toRadians
20、(double ang) return ang / 180.0 * PI;public static double toDegrees(double ang) return ang * 180.0 / PI;程序的可讀性變差:用程序的可讀性變差:用戶很難理解數(shù)字或字符戶很難理解數(shù)字或字符串的意思串的意思程序的可維護(hù)性變差:如程序的可維護(hù)性變差:如果數(shù)值改變,則需要在很果數(shù)值改變,則需要在很多地方改動(dòng),既麻煩又易多地方改動(dòng),既麻煩又易出錯(cuò)出錯(cuò)使用常量可以增強(qiáng)程序的可讀性、可維護(hù)性使用常量可以增強(qiáng)程序的可讀性、可維護(hù)性常量概述Java中常量的定義規(guī)則n加入final 關(guān)鍵字代表常量, 再加入sta
21、tic 關(guān)鍵字代表類常量n盡量使用含義直觀的常量名(大寫)來表示那些將在程序中多次出現(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(這是一名女學(xué)生這是一名女學(xué)生);else if(sex = MALE)System.out.println(這是一名
22、男學(xué)生這是一名男學(xué)生);this.sex = sex;在接口中聲明常量n在Java 接口中聲明的變量在編譯時(shí)會(huì)自動(dòng)加上static final的修飾符,即聲明為常量,因而Java接口只允許出現(xiàn)類常量(靜態(tài)常量)public interface SchoolType public static final String SCHOOL = “廈門理工學(xué)院廈門理工學(xué)院; public interface SchoolType String SCHOOL = “廈門理工學(xué)院廈門理工學(xué)院;等同于等同于OOP思想總結(jié)OOP基基本特征本特征定義定義具體實(shí)現(xiàn)方式具體實(shí)現(xiàn)方式優(yōu)勢(shì)優(yōu)勢(shì)封裝封裝隱藏實(shí)現(xiàn)細(xì)節(jié),對(duì)外提
23、供隱藏實(shí)現(xiàn)細(xì)節(jié),對(duì)外提供公共的訪問接口公共的訪問接口屬性私有化、添加公有的屬性私有化、添加公有的setter、getter方法方法增強(qiáng)代碼的可維增強(qiáng)代碼的可維護(hù)性護(hù)性,數(shù)據(jù)的安全數(shù)據(jù)的安全性性繼承繼承從一個(gè)已有的類派生出新從一個(gè)已有的類派生出新的類,子類具有父類的一的類,子類具有父類的一般特性,以及自身特殊的般特性,以及自身特殊的特性特性繼承需要符合的關(guān)系:繼承需要符合的關(guān)系:is-a,通過使用通過使用extends關(guān)鍵字實(shí)關(guān)鍵字實(shí)現(xiàn)繼承,使用現(xiàn)繼承,使用super調(diào)用父調(diào)用父類的成員類的成員1、實(shí)現(xiàn)抽象、實(shí)現(xiàn)抽象(抽出像的部分)(抽出像的部分)2、增強(qiáng)代碼的、增強(qiáng)代碼的可復(fù)用性可復(fù)用性多態(tài)多
24、態(tài)同一個(gè)實(shí)現(xiàn)接口,使用不同一個(gè)實(shí)現(xiàn)接口,使用不同的實(shí)例而執(zhí)行不同操作同的實(shí)例而執(zhí)行不同操作通過通過Java接口接口/繼承來定義繼承來定義統(tǒng)一的實(shí)現(xiàn)接口;通過方法統(tǒng)一的實(shí)現(xiàn)接口;通過方法重寫為不同的實(shí)現(xiàn)類重寫為不同的實(shí)現(xiàn)類/子類子類定義不同的操作定義不同的操作增強(qiáng)代碼的可擴(kuò)增強(qiáng)代碼的可擴(kuò)展性、可維護(hù)性展性、可維護(hù)性代碼閱讀public interface Introduceable public String detail();public void introduction()detail();private void showMessage();void speak();Java接口中的方法
25、必須是接口中的方法必須是publicJava接口中不能有方法體實(shí)現(xiàn)接口中不能有方法體實(shí)現(xiàn) 編譯器會(huì)自動(dòng)加上編譯器會(huì)自動(dòng)加上public修飾符修飾符請(qǐng)指出下列Java代碼中的錯(cuò)誤工廠設(shè)計(jì)模式工廠設(shè)計(jì)模式n工廠設(shè)計(jì)模式也是最常用的設(shè)計(jì)模式之一n它的核心思想是通過專門定義一個(gè)類,來負(fù)責(zé)創(chuàng)建其他類的實(shí)例n被創(chuàng)建的實(shí)例通常都具有共同的父類工廠設(shè)計(jì)模式工廠設(shè)計(jì)模式public interface Fruit public void eat();class Apple implements Fruit public void eat() System.out.println(“吃蘋果吃蘋果”); class
26、 Orange implements Fruit public void eat() System.out.println(“吃橘子吃橘子”); 工廠設(shè)計(jì)模式工廠設(shè)計(jì)模式public class EatDemo public static void main(String args ) Fruit f = new Apple(); f.eat(); 當(dāng)要吃其它類型的水果時(shí),就要修改代碼有缺陷嗎?工廠設(shè)計(jì)模式工廠設(shè)計(jì)模式工廠設(shè)計(jì)模式工廠設(shè)計(jì)模式public interface Fruit public void eat();class Apple implements Fruit public
27、void eat() System.out.println(“吃蘋果吃蘋果”); class Orange implements Fruit public void eat() System.out.println(“吃橘子吃橘子”); 工廠設(shè)計(jì)模式工廠設(shè)計(jì)模式Class Factory public static Fruit getInst(int arg) Fruit f; if(arg=1) f = new Apple(); if(arg=2) f = new Orange(); return f; 工廠設(shè)計(jì)模式工廠設(shè)計(jì)模式public class EatDemo public stat
28、ic void main(String args ) Fruit f; Scanner input = new Scanner(System.in); int arg = input.nextInt(); f = Factory.getInst(arg); input.close(); f.eat(); 適配器設(shè)計(jì)模式適配器設(shè)計(jì)模式nJava要求實(shí)現(xiàn)接口的類必須覆寫接口中的所有抽象類n當(dāng)一個(gè)接口中定義了大量的抽象方法,而實(shí)現(xiàn)該接口的子類只需要其中的一部分時(shí),會(huì)產(chǎn)生麻煩n適配器設(shè)計(jì)模式的思想是通過設(shè)置一個(gè)中間類(適配器類)來實(shí)現(xiàn)接口的所有方法,但方法體為空(虛假實(shí)現(xiàn));從而,子類可以有選擇的覆寫其所需的方法n適配器類通常不應(yīng)該被直接使用,因此應(yīng)定義為抽象類適配器設(shè)計(jì)模式適配器設(shè)計(jì)模式適配器設(shè)計(jì)模式適配器設(shè)計(jì)模式n例如某種操作系統(tǒng)中的標(biāo)準(zhǔn)窗口包含打開、關(guān)閉、移動(dòng)、最小化和最大化
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 21715.2-2025健康信息學(xué)患者健康卡數(shù)據(jù)第2部分:通用對(duì)象
- GB/T 29884-2025糧油機(jī)械大米色選機(jī)
- 河北省保定市定州市2025-2026學(xué)年三年級(jí)上學(xué)期期末質(zhì)量監(jiān)測(cè)語文試卷(含答案)
- 衛(wèi)星通聯(lián)題目及答案
- 激勵(lì)同學(xué)的演講稿3分鐘5篇
- 2022~2023高職單招考試題庫(kù)及答案解析第8期
- 首鋼安全監(jiān)護(hù)人考試試題及答案
- 人工技能原理考試題庫(kù)及答案
- 小兒肺炎患兒的心理護(hù)理與家屬支持
- 能源安全管理員培訓(xùn)課件
- 2026年滁州全椒縣教育體育局所屬學(xué)校校園招聘教師16名筆試備考題庫(kù)及答案解析
- 保溫一體板外墻施工方案
- 短文魯迅閱讀題目及答案
- 2025漂浮式海上風(fēng)電場(chǎng)工程可行性研究報(bào)告編制規(guī)程
- 路基工程施工方案(2016.11.6)
- UL676標(biāo)準(zhǔn)中文版-2019水下燈具和接線盒UL標(biāo)準(zhǔn)中文版
- 醫(yī)學(xué)教材 常見心律失常診治(基層醫(yī)院培訓(xùn))
- 體溫單模板完整版本
- 武漢市2024屆高中畢業(yè)生二月調(diào)研考試(二調(diào))英語試卷(含答案)
- 天然美肌無添加的護(hù)膚品
- 湖南省長(zhǎng)沙市外國(guó)語學(xué)校 2021-2022學(xué)年高一數(shù)學(xué)文模擬試卷含解析
評(píng)論
0/150
提交評(píng)論