接口与多态.ppt
《接口与多态.ppt》由会员分享,可在线阅读,更多相关《接口与多态.ppt(47页珍藏版)》请在三一办公上搜索。
1、接口与多态,接口多态构造方法与多态,接口,为什么要使用接口?在软件工程领域,要求不同的软件之间能够交互。这就需要不同软件的开发人员有一个共有的“契约”,这样以来,他们在编写各自的代码时,不用知道对方的代码是怎样实现的。概括来讲,接口(interface)就是这样一种“契约”。,接口,为什么要使用接口?设想在未来,汽车有一个无人驾驶系统,由汽车制造商使用Java语言来开发,用来控制汽车的启动,停止,转向和加速等。其它的企业,如电子导航设备的执照商,开发计算机系统接收 GPS 地理位置数据和交通状况的信息并利用这些信息来驾驶汽车。汽车制造商必须要发布作为产业标准的公用的接口,并规定接口中的方法,用
2、来操纵汽车。那么导航设备的制造商能够编写软件调用这些控制汽车方法。汽车制造商和导航设备制造商都不需要知道对方的软件是怎样实现的。他们只需要知道可以调用对方软件接口中提供的方法就可以了。,接口,例1:根据上面的故事,我们创建一个接口OperateCar,提供对汽车的各种操作。public interface OperateCar int turn(Direction direction,double radius,double startSpeed,double endSpeed);int changeLanes(Direction direction,double startSpeed,dou
3、ble endSpeed);,接口,int signalTurn(Direction direction,boolean signalOn);int getRadarFront(double distanceToCar,double speedOfCar);int getRadarRear(double distanceToCar,double speedOfCar);./more method signatures,接口,读完上面的代码大家发现了什么特点?接口中的方法没有大括号和表示语句终止的分号。下面我们编写一个实现了该接口的类。在这个类中必须实现接口中声明的每个方法。,接口,public
4、 class OperateBMW760i implements OperateCar int signalTurn(Direction direction,boolean signalOn)/编写代码实现BMW右转后关闭右转向灯/编写代码实现BMW左转后关闭左转向灯/编写代码实现BMW右转前打开右转向灯/编写代码实现BMW左转前打开左转向灯/其他成员方法,接口,本案例小结上面提供了一个由机器人驾驶汽车的例子,实现这个接口的任务将由具体的汽车制造商来完成。Chevrolet的实现方式肯定不同于Toyota,当然,这两个制造商都使用的是同样的接口。而对于车载导航系统的制造商,他们要实现的是这些接
5、口的客户机程序,构建在汽车上可以使用GPS 数据(街道的电子地图、指引汽车行驶所需的交通数据)的软件系统。要实现这一点,导航系统需要能够调用这个接口的方法:turn,change lanes,brake,accelerate,and so forth。,接口,怎样定义一个接口一个接口的定义包含以下部分:public interface GroupedInterface extends Interface1 double E=2.718282;void doSomething(int i,double x);int doSomethingElse(String s);,访问控制符,接口关键字,接
6、口名,接口可以继承,接口中可以定义常量,接口中只声明,不实现方法,接口,例2:假设在一个CAD软件中,要实现同类型图形对象大小的比较,用来比较对象的大小。比如定义一个矩形类实现该接口,使矩形类产生的对象可以调用特定方法来比较它们的大小。,接口,如果你想比较这个CAD系统中任何同类型的对象(正圆、椭圆、矩形、三角形)的大小,这些具体的类都应该实现这个Relatable接口。不同的类,比较大小的原则是不同的,比如:平面图形类比较的是它们的面积,三维图形类比较的是它们的体积,字符串比较的是字符的个数由此可见,不同类中对接口规定的比较大小的方法是不同的,不同的类对相同的方法有不同的诠释。下面给出代码范
7、例。,接口,定义接口public interface Relatable int isLargerThan(Relatable other);,实现该接口的类要给出该方法的具体实现,这个类的对象在调用时,返回-1,0,1,分别表示这个这个对象是小于、等于还是大于由参数传入的对象,接口,定义接口案例public class RectanglePlus implements Relatable public int width=0;public int height=0;public Point origin;/定义四个构造方法 public RectanglePlus()origin=new P
8、oint(0,0);public RectanglePlus(Point p)origin=p;public RectanglePlus(int w,int h)origin=new Point(0,0);width=w;height=h;public RectanglePlus(Point p,int w,int h)origin=p;width=w;height=h;,接口,/移动矩形的方法 public void move(int x,int y)origin.x=x;origin.y=y;/计算该矩形的面积 public int getArea()return width*height
9、;,接口,/实现Relatable的方法 public int isLargerThan(Relatable other)RectanglePlus otherRect=(RectanglePlus)other;if(this.getArea()otherRect.getArea()return 1;else return 0;因为 RectanglePlus 实现了 Relatable,任何两个 RectanglePlus 的对象都可以比较大小了。,接口,定义一个Comparator的类,它定义了一个比较一对对象大小的方法,而Comparator不必实现Relatable接口。public
10、Object findLargest(Object object1,Object object2)Relatable obj1=(Relatable)object1;Relatable obj2=(Relatable)object2;if(obj1).isLargerThan(obj2)0)return object1;else return object2;,接口,这样实现方法的目的是要比较的两个对象可以不考虑是否是由同一个类创建的,如果创建这两个对象的类之间有继承关系,它们也可以比较。,接口,思考与练习根据上面的案例,请你自己实现下面两个方法:public Object findSmall
11、est(Object object1,Object object2)用来获取一对对象中较小的那个对象;public boolean isEqual(Object object1,Object object2)判断一对对象是否相等;,接口,假设你已经定义了一个接口DoIt:public interface DoIt void doSomething(int i,double x);int doSomethingElse(String s);如果你现在要想加入第三个方法到DoIt,使接口变成:public interface DoIt void doSomething(int i,double x
12、);int doSomethingElse(String s);boolean didItWork(int i,double x,String s);,接口,如果你这样做了,那你就有麻烦了!你必须修改以前实现该接口的所有的类,因为这些类没有实现新加入的第三个方法。如果我们既想要添加这个方法,又不原意去惊动以前的类,怎么办呢?public interface DoItPlus extends DoIt boolean didItWork(int i,double x,String s);当你要在接口中用第三个方法时,就使用这个新的接口吧。,接口,接口小结一个接口定义两个相互通信的对象的协议。接口
13、中包括一组只有声明没有实现的方法,也可以包含一组常量,它们都默认为static和final。一个类如果要实现一个接口,在类体中就必须实现接口中声明的所有方法。接口可以被当作一个数据类型来使用。接口之间可以继承。,接口,思考与练习编写一个类实现 java.lang 包中的CharSequence 接口。用一个字符串作为测试的数据。假设你已经完成了一个有计时功能的服务器程序,它可以定时通知客户机当前的日期和时间。编写一个服务器程序可以使用的接口,用来向客户机添加特定协议。,多态,类的继承机制不仅仅提供了对类的重用,而且为应用程序提供了极大的灵活性,这种灵活性我们通常叫做多态。那么,什么是多态?我们
14、在编程中如何体现这种灵活性呢?在面向对象的编程中,“多态”意味着调用一个方法时,因为对方法传入参数的对象类型不同,语言可以自动执行能够对应该对象类型的特定方法(方法的具体实现可能有多种)。,多态,bark(),bark(),bark(),aDog.bark(),多态,上图中三个子类的bark()方法实现内容都不一样,在程序中到底用那一个,取决于对象的类型是上面的那个类。多态性提供统一的调用接口,程序会自动根据不同的需求(参数),执行不同函数(方法)。为了更好地说明多态性的实现过程,我们列举下面的程序来说明。,多态,解决方案public class Animal public Animal(St
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 接口

链接地址:https://www.31ppt.com/p-5298554.html