收藏 分享(赏)

第13讲 接口.ppt

上传人:yjrm16270 文档编号:8367871 上传时间:2019-06-23 格式:PPT 页数:29 大小:795.50KB
下载 相关 举报
第13讲 接口.ppt_第1页
第1页 / 共29页
第13讲 接口.ppt_第2页
第2页 / 共29页
第13讲 接口.ppt_第3页
第3页 / 共29页
第13讲 接口.ppt_第4页
第4页 / 共29页
第13讲 接口.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、计算机科学技术系 李群,第13讲 接口,计算机科学技术系 李群,复习与回顾,多态的定义 运行时的多态性 在Java程序中,多态性带给我们的好处是什么?,计算机科学技术系 李群,本章任务,描述某学校的院系和教师的信息,并使用打印机打印院系与教师的详细信息: 正确使用面向接口编程的思想 提高系统的可扩展性及可维护性,计算机科学技术系 李群,掌握Java接口 理解Java接口与多态的关系 掌握面向接口编程的思想 掌握接口中常量的使用,本章目标,计算机科学技术系 李群,生活中的接口,电脑主板上的PCI插槽的规范就类似于Java接口,声卡,显卡,网卡,每种卡的内部结构都不相同,可以把声卡、网卡、显卡都插

2、在PCI插槽上,而不用担心哪个插槽是专门插哪个卡的,主板,计算机科学技术系 李群,什么是Java接口 2-1,一个Java接口是一些方法特征的集合,但没有方法的实现,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接口中定义的方法在不同的地方

3、被实现,可以具有完全不同的行为,这是Java接口,相当于主板上的PCI插槽的规范,class NetworkCard implements PCI public void start() System.out.println(“Send.“); public void stop() System.out.println(“Network stop!“); ,声卡、网卡都遵守了PCI插槽的规范,但行为完全不同,计算机科学技术系 李群,什么是Java接口 2-2,public class Assembler public static void main(String args) PCI nc =

4、 new NetworkCard(); PCI sc = new SoundCard(); nc.start();sc.start(); ,可以使用Java接口标识类型 运行时,根据实际创建的对象类型调用相应的方法实现,Du du. Send.,控制台输出,2,1,计算机科学技术系 李群,为什么需要Java接口 5-1,为某学校的各院系开发这样一个小系统,包含类型:教师、院系、打印机,具体要求如下: 教师、以及院系都具有方法:输出详细信息 院系具有属性:打印机,能够通过院系的打印机打印教师或院系的详细信息 系统要具备良好的可扩展性与可维护性,打印,教师,院系,教师 详细信息,院系 详细信息,d

5、etail方法 (输出详细信息),计算机科学技术系 李群,为什么需要Java接口 5-2,以下这个解决方案中存在着什么问题?,public class Teacher/输出教员的详细信息 public String detail() return “本人是教师“; ,public class Department private Printer printer = new Printer();/输出院系的详细信息 public String detail() return “这里是院系“; /使用打印机打印教师信息 public void print(Teacher t) printer.pr

6、int(t.detail(); /使用打印机打印院系信息 public void print(Department d)printer.print(d.detail(); ,public class Printer public void print(String content) System.out.println(“开始打印:“); System.out.println(content); ,每增加一种新类型,都需增加相应的print(新增类型名 obj)方法 程序的可扩展性及可维护性极差 这不符合系统的要求,计算机科学技术系 李群,为什么需要Java接口 5-3,可以通过多态性解决这个

7、问题吗?,显然,本系统符合使用多态性的条件,教师,院系,detail方法 (负责输出详细信息),教师 详细信息,院系 详细信息,1,2,2,1,回顾多态的含义: 实现同一个接口,使用不同的实例而执行不同操作,计算机科学技术系 李群,为什么需要Java接口 5-4,在这个系统中,存在继承关系吗? 教师、院系属于两种不同的类型,无法通过“is-a”找到一个合适的父类 教师、院系都存在一个共同的方法特征:detail,它们对detail方法有各自不同的实现这完全符合Java接口的定义,定义一个Java接口,在其中定义detail方法,但没有具体实现,实现这个Java接口,不同的类对detail方法有

8、不同的具体实现,计算机科学技术系 李群,为什么需要Java接口 5-5,public interface Introduceable public String detail(); ,public class Departmentimplements Introduceableprivate Printer printer = new Printer();/输出中心的详细信息 public String detail() return “这里是院系“; /使用院系打印机打印信息 public void print(Introduceable intro) printer.print(intro

9、.detail(); ,public class Teacher implements Introduceable/输出教师的详细信息 public String detail() return “本人是教师“; ,通过Java接口,我们同样可以享受到多态性的好处,大大提高了程序的可扩展性及可维护性,使用print方法时,参数可以是任何Introduceable接口的实现类的对象,不必再为不同的类型建立不同的print方法了,使用了Java接口之后,这个系统有了怎样的改进?,计算机科学技术系 李群,小结 1,为刚才完成的系统增加一种新的类型:学生(Student),具体要求如下: 学生具有de

10、tail方法,负责输出学生详细信息 能够通过院系的打印机打印学生的详细信息 系统要具备良好的可扩展性与可维护性 编写测试类StudentTest进行测试,要求: 通过院系的打印机打印学生的详细信息,计算机科学技术系 李群,什么是面向接口编程,开发系统时,主体构架使用接口,接口构成系统的骨架 这样就可以通过更换接口的实现类来更换系统的实现,public class Department implements Introduceable private Printer printer = new Printer(); public String detail() return “这里是院系“; /

11、使用院系打印机打印信 public void print(Introduceable intro) printer.print(intro.detail(); ,Introduceable,Teacher (教师),Department (院系),计算机科学技术系 李群,面向接口编程的示例 4-1,升级上述的系统,要求: 打印机有多种类型,比如:黑白打印机、彩色打印机等 院系可能配备其中任意一款打印机,负责打印教师、或者院系的详细信息 系统要具备良好的可扩展性与可维护性,print方法 (打印),彩色打印机,黑白打印机,黑白内容,院系/教师 详细信息,彩色内容,计算机科学技术系 李群,面向接口

12、编程的示例 4-2,采用面向接口编程的方式实现,以下是三个步骤中的第一步:,抽象出Java接口 1、分析: 黑白、彩色打印机都存在一个共同的方法特征:print 黑白、彩色打印机对print方法有各自不同的实现 2、结论: 抽象出Java接口PrinterFace,在其中定义方法print 3、具体实现:,public interface PrinterFace public void print(String content); ,计算机科学技术系 李群,面向接口编程的示例 4-3,以下是三个步骤中的第二步:,public class ColorPrinter implements Prin

13、terFace public 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); ,实现Java接口 1、分析:已经抽象出Java接口PrinterFace,并在其中定义了print方法 黑白、彩色打印

14、机对print方法有各自不同的实现 2、结论:黑白、彩色打印机都实现PrinterFace接口,各自实现print方法 3、具体实现:,计算机科学技术系 李群,面向接口编程的示例 4-4,以下是三个步骤中的第三步:,使用Java接口 1、分析:主体构架使用接口, 让接口构成系统的骨架 2、结论:更换实现接口的类就可以更换系统的实现 3、具体实现:,public class Department implements Introduceableprivate PrinterFace printer; /打印机public void setPrinter(PrinterFace p) this.p

15、rinter = p;public String detail() return “这里是院系“;public void print(Introduceable intro)printer.print(intro.detail(); ,public class DepartmentTest public static void main(String args) / 创建中心实例Department dep=new Department();/为该院系配备黑白打印机school.setPrinter(new BlackPrinter();school.print(school); /为该院系配

16、备彩色打印机school.setPrinter(new ColorPrinter();school.print(school); ,计算机科学技术系 李群,小结 2,阅读如下Java代码,然后请采用面向接口编程的思想,在空白处填写正确的代码,public interface PCI void start(); void stop(); ,class SoundCard implements PCIpublic void start() System.out.println(“Du du.“); public void stop() System.out.println(“Sound stop!

17、“); ,class NetworkCard implements PCIpublic void start() System.out.println(“Send.“); public void stop() System.out.println(“Network stop!“); ,这是Java接口,相当于主板上的PCI插槽的规范,声卡、网卡都遵守了PCI插槽的规范,但行为完全不同,计算机科学技术系 李群,小结 2,public class MainBoard public void usePCICard(_ p) p.start(); p.stop(); ,public class Ass

18、embler public static void main(String args) MainBoard mb=new MainBoard(); /在主板上插入网卡/在主板上插入声卡 ,提示:通过这个方法,主板上可以插入任意符合PCI插槽规范的卡,PCI nc=new NetworkCard(); mb.usePCICard(nc);,PCI sc=new SoundCard(); mb.usePCICard(sc);,PCI,提示:可以通过更换实现接口的类来更换系统的实现,计算机科学技术系 李群,为什么需要常量,生活中,一周有七天,如何用代码表示?,public class Week pr

19、ivate 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天,控制台输出,然而,总有不尽人意的事情发生:,一周有8天,控制

20、台输出,如何保证变量的值在运行期无法被改变?使用常量,计算机科学技术系 李群,什么是常量,常量是一种标识符,它的值在运行期间恒定不变 常量标识符在程序中只能被引用,而不能被重新赋值,计算机科学技术系 李群,常量的优点,如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?,public static double toRadians(double ang) return ang / 180.0 * 3.14159265358979323846; public static double toDegrees(double ang) return ang * 180.0 / 3.14159

21、265358979323846; ,public 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; ,程序的可读性变差:用户很难理解数字或字符串的意思,程序的可维护性变差:如果数值改变,则需要在很多地方改动,既麻烦又易出错,使用常量可以增强程序的可读性、可维护性,计算

22、机科学技术系 李群,Java中常量的定义规则,加入final 关键字代表常量, 加入static 关键字代表类变量 尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串,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

23、= MALE)System.out.println(“这是一名男学生“); this.sex = sex; ,计算机科学技术系 李群,在Java接口中声明常量,在Java 接口中声明的变量在编译时会自动加上static final的修饰符,即声明为常量,因而Java接口通常是存放常量的最佳地点,public interface KFCType public static final String NATIONAL = “国立学校“;public static final String PRIVATE= “私立学校“; ,public interface SchoolType String NA

24、TIONAL = “国立学校“;String PRIVATE= “私立学校“; ,等同于,计算机科学技术系 李群,小结 3,编写一个用于放置常量的Java接口Constants,具有常量MAX和MIN 编写一个测试类ConstantsTest,在main方法中求取Constants中的两个常量之差,计算机科学技术系 李群,OO思想总结,计算机科学技术系 李群,总结,public interface Introduceable public String detail();public void introduction()detail(); private void showMessage();void speak(); ,Java接口中的方法必须是public,Java接口中不能有方法体实现,编译器会自动加上public修饰符,请指出下列Java代码中的错误,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报