Java学习第5章.ppt
《Java学习第5章.ppt》由会员分享,可在线阅读,更多相关《Java学习第5章.ppt(92页珍藏版)》请在三一文库上搜索。
1、第5章 接口与多态,Programming in JAVA,2,目录,5.1 接口 5.2 塑型 5.3 多态的概念 5.4 多态的应用 5.5 构造方法与多态 5.6 内部类 5.7 本章小结,3,5.1 接口,接口 与抽象类一样都是定义多个类的共同属性 使抽象的概念更深入了一层,是一个“纯”抽象类,它只提供一种形式,并不提供实现 允许创建者规定方法的基本形式:方法名、参数列表以及返回类型,但不规定方法主体 也可以包含基本数据类型的数据成员,但它们都默认为static和final,4,5.1.1 接口的作用及语法,接口的作用 是面向对象的一个重要机制 实现多继承,同时免除C+中的多继承那样的
2、复杂性 建立类和类之间的“协议” 把类根据其实现的功能来分别代表,而不必顾虑它所在的类继承层次;这样可以最大限度地利用动态绑定,隐藏实现细节 实现不同类之间的常量共享,接口,5,接口允许我们在看起来不相干的对象之间定义共同行为,5.1.1 接口的作用及语法 与抽象类的不同,接口,6,保险公司的例子 具有车辆保险、人员保险、公司保险等多种保险业务,在对外提供服务方面具有相似性,如都需要计算保险费(premium)等,因此可声明一个Insurable 接口 在UML图中,实现接口用带有空三角形的虚线表示,5.1.1 接口的作用及语法 例5_1,接口,7,接口的语法 声明格式为 接口修饰符 inte
3、rface 接口名称 extends 父接口名 /方法的原型声明或静态常量 接口的数据成员一定要赋初值,且此值将不能再更改,允许省略final关键字 接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字,5.1.1 接口的作用及语法,接口,8,例5.1中的Insurable 接口声明如下,可见其中的方法都是抽象方法 public interface Insurable public int getNumber(); public int getCoverageAmount(); public double calculatePremium(); publi
4、c Date getExpiryDate(); ,5.1.1 接口的作用及语法 例5_1保险接口的声明,接口,9,声明一个接口Shape2D,可利用它来实现二维的几何形状类Circle和Rectangle 把计算面积的方法声明在接口里 pi值是常量,把它声明在接口的数据成员里 interface Shape2D /声明Shape2D接口 final double pi=3.14; /数据成员一定要初始化 public abstract double area(); /抽象方法 在接口的声明中,允许省略一些关键字,也可声明如下 interface Shape2D double pi=3.14;
5、double area(); ,5.1.1 接口的作用及语法 例5_2,接口,10,5.1.2 实现接口,接口的实现 接口不能用new运算符直接产生对象,必须利用其特性设计新的类,再用新类来创建对象 利用接口设计类的过程,称为接口的实现,使用implements关键字 语法如下 public class 类名称 implements 接口名称 /* Bodies for the interface methods */ /* Own data and methods. */ 必须实现接口中的所有方法 来自接口的方法必须声明成public,接口,11,实现接口Insurable,声明汽车类实现例
6、5.1中的Insurable接口,实现接口中的所有抽象方法 public class Car implements Insurable public int getPolicyNumber() / write code here public double calculatePremium() / write code here public Date getExpiryDate() / write code here public int getCoverageAmount() / write code here public int getMileage() /新添加的方法 /write
7、code here ,5.1.2 实现接口 例5_3,接口,12,对象可以被转型为其所属类实现的接口类型 getPolicyNumber、calculatePremium是Insurable接口中声明的方法 getMileage是Car类新添加的方法,Insurable接口中没有声明此方法 Car jetta = new Car(); Insurable item = (Insurable)jetta; /对象转型为接口类型 item.getPolicyNumber(); item.calculatePremium(); item.getMileage(); / 接口中没有声明此方法,不可以
8、jetta.getMileage(); / 类中有此方法,可以 (Car)item).getMileage(); / 转型回原类,可调用此方法了,5.1.2 实现接口 对象转型,接口,13,5.1.2 实现接口 例5_4,class Circle implements Shape2D double radius; public Circle(double r) radius=r; public double area() return (pi * radius * radius); ,class Rectangle implements Shape2D int width,height; pu
9、blic Rectangle(int w,int h) width=w; height=h; public double area() return (width * height); ,声明Circle与Rectangle两个类实现Shape2D接口,接口,14,测试类 public class InterfaceTester public static void main(String args) Rectangle rect=new Rectangle(5,6); System.out.println(“Area of rect = “ + rect.area(); Circle cir
10、=new Circle(2.0); System.out.println(“Area of cir = “ + cir.area(); 运行结果 Area of rect = 30.0 Area of cir = 12.56,5.1.2 实现接口 例5_4运行结果,接口,15,声明接口类型的变量,并用它来访问对象 public class VariableTester public static void main(String args) Shape2D var1,var2; var1=new Rectangle(5,6); System.out.println(“Area of var1
11、= “ + var1.area(); var2=new Circle(2.0); System.out.println(“Area of var2 = “ + var2.area(); 输出结果 Area of var1 = 30.0 Area of var2 = 12.56,5.1.2 实现接口 例5_5,接口,16,MovableObject接口定义了所有“可移动对象”能做的事情 public interface MovableObject public boolean start(); public void stop(); public boolean turn(int degrees
12、); public double fuelRemaining(); public void changeSpeed(double kmPerHour); ,5.1.2 实现接口 MovableObject接口,接口,17,Plane、Car、 Train、 Boat 分别实现 MovableObject 接口 public class Plane implements MovableObject public int seatCapacity; public Company owner; public Date lastRepairDate; /实现MovalbelObject接口的所有方法
13、public boolean start() /启动飞机,成功则返回true public void stop() /停止 public boolean turn(int degrees) /转向,成功则返回true public double fuelRemaining() /返回燃料剩余量 public void changeSpeed(double kmPerHour) /改变速度 /plane类自己的方法: public Date getLastRepairDate() /. public double calculateWindResistance() / ,5.1.2 实现接口 M
14、ovableObject接口的实现,接口,18,为 MovableObjects安装遥控器(remote control) public class RemoteControl private MovableObject machine; RemoteControl(MovableObject m) machine = m; /按下“启动”按钮: public void start() boolean okay = machine.start(); if (!okay) display(“No Response on start“); /. remote control 构造方法的形参类型为
15、MovableObject,它可以是Plane, Car, Train, Boat, 等等,5.1.2 实现接口 RemoteControl类,接口,19,5.1.3 多重继承,多重继承 Java的设计以简单实用为导向,不允许一个类有多个父类 但允许一个类可以实现多个接口,通过这种机制可实现多重继承 一个类实现多个接口的语法如下 类修饰符 class 类名称 implements 接口1,接口2, ,接口,20,Car类可以实现接口Insurable,Drivable,Sellable public class Car implements Insurable, Drivable, Sella
16、ble ,5.1.3 多重继承 Car的例子,接口,21,声明Circle类实现接口Shape2D和Color Shape2D具有pi与area()方法,用来计算面积 Color则具有setColor方法,可用来赋值颜色 通过实现这两个接口,Circle类得以同时拥有这两个接口的成员,达到了多重继承的目的 interface Shape2D /声明Shape2D接口 final double pi=3.14; /数据成员一定要初始化 public abstract double area(); /抽象方法 interface Color void setColor(String str); /
17、抽象方法 ,5.1.3 多重继承 例5_6,接口,22,class Circle implements Shape2D,Color / 实现Circle类 double radius; String color; public Circle(double r) /构造方法 radius=r; public double area() /定义area()的处理方式 return (pi*radius*radius); public void setColor(String str) /定义setColor()的处理方式 color=str; System.out.println(“color=“
18、+color); ,接口,5.1.3 多重继承 例5_6,23,测试类 public class MultiInterfaceTester public static void main(String args) Circle cir; cir=new Circle(2.0); cir.setColor(“blue“); System.out.println(“Area = “ + cir.area(); 输出结果 color=blue Area = 12.56,接口,5.1.3 多重继承 例5_6运行结果,24,5.1.4 接口的扩展,接口的扩展 接口可通过扩展的技术派生出新的接口 原来的接
19、口称为基本接口(base interface)或父接口(super interface) 派生出的接口称为派生接口(derived interface)或子接口(sub interface) 派生接口不仅可以保有父接口的成员,同时也可加入新成员以满足实际问题的需要 实现接口的类也必须实现此接口的父接口 接口扩展的语法 interface 子接口的名称 extends 父接口的名称1,父接口的名称2, ,接口,25,Shape是父接口,Shape2D与Shape3D是其子接口。Circle类及Rectangle类实现接口Shape2D,而Box类及Sphere类实现接口Shape3D,5.1.4
20、 接口的扩展 例5_7,接口,26,部分代码如下 / 声明Shape接口 interface Shape double pi=3.14; void setColor(String str); /声明Shape2D接口扩展了Shape接口 interface Shape2D extends Shape double area(); ,5.1.4 接口的扩展 例5_7,接口,27,class Circle implements Shape2D double radius; String color; public Circle(double r) radius=r; public double a
21、rea() return (pi*radius*radius); public void setColor(String str) color=str; System.out.println(“color=“+color); public class ExtendsInterfaceTester /测试类 public static void main(String args) Circle cir; cir=new Circle(2.0); cir.setColor(“blue“); System.out.println(“Area = “ + cir.area(); ,5.1.4 接口的扩
22、展 例5_7,接口,28,运行结果 color=blue Area = 12.56 说明 首先声明了父接口Shape,然后声明其子接口Shape2D 之后声明类Circle实现Shape2D子接口,因而在此类内必须明确定义setColor()与area()方法的处理方式 最后在主类中我们声明了Circle类型的变量cir并创建新的对象,最后通过cir对象调用setColor()与area()方法,5.1.4 接口的扩展 例5_7运行结果,接口,29,FixedInsurable 和DepreciatingInsurable接口 都继承了Insurable接口 实现它们类也必须实现Insurab
23、le接口中的所有方法 public interface DepreciatingInsurable extends Insurable public double computeFairMarketValue(); public interface FixedInsurable extends Insurable public int getEvaluationPeriod(); ,5.1.4 接口的扩展 Insurable接口的例子,接口,30,5.2 塑型,塑型(type-casting) 又称为类型转换 方式 隐式(自动)的类型转换 显式(强制)的类型转换,31,5.2.1 塑型的概念,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 学习
链接地址:https://www.31doc.com/p-2976861.html