




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宁夏小学五年级上册数学应用题100道及答案
- 2024高级会计模拟试题集及答案
- 外语能力综合测评技巧试题及答案
- 中级审计师考试的复习策略与试题及答案的整合
- 护理服务能力提升试题及答案
- 工程预算编制试题及答案
- 车间规划承包合同协议
- 企业宣传片制作合同
- 2025年建筑法规解读试题及答案
- 途虎养车招工合同协议
- 生态环境数字化治理的杭州创新与经验
- 2023年山东省济南市中考语文试卷
- 建筑起重信号司索工试题库(附答案)
- Unit1-Unit3 (单元测试)-2024-2025学年人教PEP版(2024)英语三年级上册
- 一起干活安全协议书
- 六上 Unit 1 Part A 课件人教版六年级英语
- 从心理学角度谈医患沟通
- 酒店装修工程保修条款
- 常用焊管规格表
- DL∕T 5161.17-2018 电气装置安装工程质量检验及评定规程 第17部分:电气照明装置施工质量检验
- 中南财经政法大学场地使用申报表
评论
0/150
提交评论