ImageVerifierCode 换一换
格式:DOC , 页数:20 ,大小:338KB ,
资源ID:9257094      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/9257094.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(接口与多态教案.doc)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

接口与多态教案.doc

1、第5章 接口与多态教案 1. 教学内容 l 接口作用及语法 l 塑型的概念及应用 l 多态的概念及引用 l 构造方法的调用顺序及其中的多态方法 2. 教学要求 l 理解接口、塑型、多态的概念并能熟练应用 l 熟练掌握构造方法的调用顺序,理解编写时需要注意的问题 l 自学内部类的语法结构及其应用场合 3. 授课时间:4学时 4. 授课方式:讲授+案例讲解与演示 5. 课堂组织: (1)每次课用5分钟时间回顾上次讲课内容 (2)每次课用5分钟时间总结本次课内容 (3)在讲课过程中注意案例分析,调动学生积极性 6. 授课内容:

2、 5.1 接口 l 接口 l 与抽象类一样都是定义多个类的共同属性 l 使抽象的概念更深入了一层,是一个“纯”抽象类,它只提供一种形式,并不提供实现 l 允许创建者规定方法的基本形式:方法名、参数列表以及返回类型,但不规定方法主体 l 也可以包含基本数据类型的数据成员,但它们都默认为static和final 5.1.1 接口的作用及语法 接口 l 接口的作用 l 是面向对象的一个重要机制 l 实现多继承,同时免除C++中的多继承那样的复杂性 l 建立类和类之间的“协议” l 把类根据其实现的功能来分别代表,而不必顾虑它所在的类继承层次;这样可以最大限度地利用动态绑定

3、隐藏实现细节 l 实现不同类之间的常量共享 5.1.1 接口的作用及语法 ——与抽象类的不同 接口 l 接口允许我们在看起来不相干的对象之间定义共同行为 5.1.1 接口的作用及语法 ——例5_1 接口 l 保险公司的例子 l 具有车辆保险、人员保险、公司保险等多种保险业务,在对外提供服务方面具有相似性,如都需要计算保险费(premium)等,因此可声明一个Insurable 接口 l 在UML图中,实现接口用带有空三角形的虚线表示 <> Insurable Company Person Car

4、 5.1.1 接口的作用及语法 接口 l 接口的语法 l 声明格式为 l [接口修饰符] interface 接口名称 [extends 父接口名]{ l …//方法的原型声明或静态常量 l } l 接口的数据成员一定要赋初值,且此值将不能再更改,允许省略final关键字 l 接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字 5.1.1 接口的作用及语法 ——例5_1保险接口的声明 接口 l 例5.1中的Insurable 接口声明如下,可见其中的方法都是抽象方法 l public interface Insu

5、rable { l public int getNumber(); l public int getCoverageAmount(); l public double calculatePremium(); l public Date getExpiryDate(); l } 5.1.1 接口的作用及语法 ——例5_2 接口 l 声明一个接口Shape2D,可利用它来实现二维的几何形状类Circle和Rectangle l 把计算面积的方法声明在接口里 l pi值是常量,把它声明在接口的数据成员里 l

6、 interface Shape2D{    //声明Shape2D接口 l final double pi=3.14;   //数据成员一定要初始化 l public abstract double area(); //抽象方法 l } l 在接口的声明中,允许省略一些关键字,也可声明如下 l interface Shape2D{ l double pi=3.14; l double area(); l } 5.1.2 实现接口 接口 l 接口的实现

7、l 接口不能用new运算符直接产生对象,必须利用其特性设计新的类,再用新类来创建对象 l 利用接口设计类的过程,称为接口的实现,使用implements关键字 l 语法如下 l public class 类名称 implements 接口名称 { l /* Bodies for the interface methods */ l /* Own data and methods. */ l } l 必须实现接口中的所有方法 l 来自接口的方法必须声明成public 5.1.2 实现接口 ——

8、例5_3 接口 l 实现接口Insurable,声明汽车类实现例5.1中的Insurable接口,实现接口中的所有抽象方法 l public class Car implements Insurable { l public int getPolicyNumber() { l // write code here l } l public double calculatePremium() { l // write code here l }

9、 l public Date getExpiryDate() { l // write code here l } l public int getCoverageAmount() { l // write code here l } l public int getMileage() { //新添加的方法 l //write code here l } l } 5.1

10、2 实现接口 ——对象转型 接口 l 对象可以被转型为其所属类实现的接口类型 l getPolicyNumber、calculatePremium是Insurable接口中声明的方法 l getMileage是Car类新添加的方法,Insurable接口中没有声明此方法 l Car  jetta = new Car(); l Insurable  item = (Insurable)jetta; //对象转型为接口类型 l item.getPolicyNumber(); l item.calculatePremium(); l

11、item.getMileage();        // 接口中没有声明此方法,不可以 l jetta.getMileage();       // 类中有此方法,可以 l ((Car)item).getMileage(); // 转型回原类,可调用此方法了 5.1.2 实现接口 ——例5_4 接口 l 声明Circle与Rectangle两个类实现Shape2D接口 class Circle implements Shape2D { double radius; public Ci

12、rcle(double r) { radius=r; } public double area() { return (pi * radius * radius); } } class Rectangle implements Shape2D { int width,height; public Rectangle(int w,int h) { width=w; height=h; } publ

13、ic double area() { return (width * height); } } 5.1.2 实现接口 ——例5_4运行结果 接口 l 测试类 l public class InterfaceTester { l public static void main(String args[]){ l Rectangle rect=new Rectangle(5,6); l System.out.println("Area of rect = "

14、 + rect.area()); l Circle cir=new Circle(2.0); l System.out.println("Area of cir = " + cir.area()); l } l } l 运行结果 l Area of rect = 30.0 l Area of cir = 12.56 5.1.2 实现接口 ——例5_5 接口 l 声明接口类型的变量,并用它来访问对象 l public class VariableTester { l public static

15、 void main(String []args) l { l Shape2D var1,var2; l var1=new Rectangle(5,6); l System.out.println("Area of var1 = " + var1.area()); l var2=new Circle(2.0); l System.out.println("Area of var2 = " + var2.area()); l } l } l 输出结果 l Area of var1 = 30.0 l Area of var2 = 12.56

16、 5.1.2 实现接口 ——MovableObject接口 接口 l MovableObject接口定义了所有“可移动对象”能做的事情 l public interface  MovableObject { l public boolean    start(); public void       stop(); public boolean    turn(int degrees); public double     fuelRemaining(); public void       changeSpeed

17、double kmPerHour); l } 5.1.2 实现接口 ——MovableObject接口的实现 接口 l Plane、Car、 Train、 Boat 分别实现 MovableObject 接口 l public class Plane implements  MovableObject { l public int   seatCapacity; l public Company  owner; l public Date  lastRepairDate; l //实现MovalbelObject接口的所有方法

18、 l public boolean start() { //启动飞机,成功则返回true } l public void stop() { //停止 } l public boolean turn(int degrees) { //转向,成功则返回true} l public double fuelRemaining() { //返回燃料剩余量 } l public void changeSpeed(double kmPerHour) { //改变速度 } l //plane类自己的方法: l public Da

19、te getLastRepairDate() { //... } l public double calculateWindResistance() { //....} l } 5.1.2 实现接口 ——RemoteControl类 接口 l 为 MovableObjects安装遥控器(remote control) l public class RemoteControl {   private MovableObject   machine;     l RemoteControl(MovableObject m) {

20、machine = m; }   //按下“启动”按钮: public void start() l { l     boolean okay = machine.start();     if (!okay) display("No Response on start");     //... } l } l remote control 构造方法的形参类型为 MovableObject,它可以是Plane, Car, Train, Boat, 等等 5.1.3 多重继承 接口 l 多重继承 l

21、 Java的设计以简单实用为导向,不允许一个类有多个父类 l 但允许一个类可以实现多个接口,通过这种机制可实现多重继承 l 一个类实现多个接口的语法如下 l [类修饰符] class 类名称 implements 接口1,接口2, … l { l … … l } 5.1.3 多重继承 ——Car的例子 接口 l Car类可以实现接口Insurable,Drivable,Sellable l public class Car implements Insurable, Drivable, Sellable l {    .... l

22、 } 5.1.3 多重继承 ——例5_6 接口 l 声明Circle类实现接口Shape2D和Color l Shape2D具有pi与area()方法,用来计算面积 l Color则具有setColor方法,可用来赋值颜色 l 通过实现这两个接口,Circle类得以同时拥有这两个接口的成员,达到了多重继承的目的 l interface Shape2D{ //声明Shape2D接口 l final double pi=3.14; //数据成员一定要初始化 l public abstract double ar

23、ea(); //抽象方法 l } l interface Color{ l void setColor(String str); //抽象方法 l } 5.1.3 多重继承 ——例5_6 接口 class Circle implements Shape2D,Color // 实现Circle类 { double radius; String color; public Circle(double r) //构造方法 { radius=r; } pu

24、blic double area() //定义area()的处理方式 { return (pi*radius*radius); } public void setColor(String str) //定义setColor()的处理方式 { color=str; System.out.println("color="+color); } } 5.1.3 多重继承 ——例5_6运行结果 接口 l 测试类 l public class Mult

25、iInterfaceTester{ l public static void main(String args[]) { l Circle cir; l cir=new Circle(2.0); l cir.setColor("blue"); l System.out.println("Area = " + cir.area()); l } l } l 输出结果 l color=blue l Area = 12.56 5.1.4 接口的扩展 接口 l 接口的扩展 l 接口可通过扩展的技术派生出新的接口 l 原来的

26、接口称为基本接口(base interface)或父接口(super interface) l 派生出的接口称为派生接口(derived interface)或子接口(sub interface) l 派生接口不仅可以保有父接口的成员,同时也可加入新成员以满足实际问题的需要 l 实现接口的类也必须实现此接口的父接口 l 接口扩展的语法 l interface 子接口的名称 extends 父接口的名称1,父接口的名称2,… l { l … … l } 5.1.4 接口的扩展 ——例5_7 接口 l Shape是父接口,Shape2D与Shap

27、e3D是其子接口。Circle类及Rectangle类实现接口Shape2D,而Box类及Sphere类实现接口Shape3D Shape接口 Shape2D接口 Shape3D接口 Sphere类 Box类 Rectangle类 Circle类 5.1.4 接口的扩展 ——例5_7 接口 l 部分代码如下 l // 声明Shape接口 l interface Shape{ l double pi=3.14; l void setColor(String str); l

28、 } l //声明Shape2D接口扩展了Shape接口 l interface Shape2D extends Shape { l double area(); l } 5.1.4 接口的扩展 ——例5_7 接口 class Circle implements Shape2D { double radius; String color; public Circle(double r) { radius=r; } public double area() { return (pi*radi

29、us*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");

30、 System.out.println("Area = " + cir.area()); } } 5.1.4 接口的扩展 ——例5_7运行结果 接口 l 运行结果 l color=blue l Area = 12.56 l 说明 l 首先声明了父接口Shape,然后声明其子接口Shape2D l 之后声明类Circle实现Shape2D子接口,因而在此类内必须明确定义setColor()与area()方法的处理方式 l 最后在主类中我们声明了Circle类型的变量cir并创建新的对象,最后通过cir对象调用setColor()与area

31、)方法 5.1.4 接口的扩展 ——Insurable接口的例子 接口 l FixedInsurable 和DepreciatingInsurable接口 l 都继承了Insurable接口 l 实现它们类也必须实现Insurable接口中的所有方法 l public interface DepreciatingInsurable extends  Insurable {     public double computeFairMarketValue(); l } l public interface FixedInsurable

32、 extends  Insurable {     public int getEvaluationPeriod(); l } 5.2 塑型 l 塑型(type-casting) l 又称为类型转换 l 方式 l 隐式(自动)的类型转换 l 显式(强制)的类型转换 5.2.1 塑型的概念 塑型 l 塑型的对象包括 l 基本数据类型 l 将值从一种形式转换成另一种形式 l 引用变量 l 将对象暂时当成更一般的对象来对待,并不改变其类型 l 只能被塑型为 l 任何一个父类类型 l 对象所属的类实现的一个接口 l 被塑型为父类或接口后,再被塑型回其

33、本身所在的类 5.2.1 塑型的概念 ——一个例子 塑型 l Manager对象 l 可以被塑型为Employee、Person、Object或Insurable, l 不能被塑型为Customer、Company或Car Object Person Employee Customer Manager Company Car <> Insurable 5.2.1 塑型的概念 ——隐式(自动)的类型转换 塑型 l 基本数据类型 l 相容类型之间存储容量低的自动向存储容量高的类型转换 l

34、引用变量 l 被塑型成更一般的类 l Employee emp; l emp = new Manager(); //将Manager类型的对象直接赋给 l //Employee类的引用变量,系统会 l //自动将Manage对象塑型为Employee类 l 被塑型为对象所属类实现的接口类型 l Car jetta = new Car(); l Insura

35、ble item = jetta; 5.2.1 塑型的概念 ——显式(强制)的类型转换 塑型 l 基本数据类型 l (int)871.34354; // 结果为 871 l (char)65; // 结果为‘A’ l (long)453; // 结果为453L l 引用变量:还原为本来的类型 l Employee emp; l Manager man; l emp = new Manager(); l man = (Manager)emp; //将emp强制塑型为本来的类型 5.2.2 塑

36、型的应用 塑型 l 塑型应用的场合包括 l 赋值转换 l 赋值号右边的表达式类型或对象转换为左边的类型 l 方法调用转换 l 实参的类型转换为形参的类型 l 算数表达式转换 l 算数混合运算时,不同类型的项转换为相同的类型再进行运算 l 字符串转换 l 字符串连接运算时,如果一个操作数为字符串,一个操作数为数值型,则会自动将数值型转换为字符串 5.2.2 塑型的应用 塑型 l 当一个类对象被塑型为其父类后,它提供的方法会减少 l 当Manager对象被塑型为Employee之后,它只能接收getName()及getEmployeeNumber()方法,不能

37、接收getSalary()方法 l 将其塑型为本来的类型后,又能接收getSalary()方法了 5.2.3 方法的查找 塑型 l 如果在塑型前和塑型后的类中都提供了相同的方法,如果将此方法发送给塑型后的对象,那么系统将会调用哪一个类中的方法? l 实例方法的查找 l 类方法的查找 5.2.3 方法的查找 ——实例方法的查找 塑型 l 从对象创建时的类开始,沿类层次向上查找 Manager   man = new Manager(); Employee  emp1 = new Employee(); Employee 

38、emp2 = (Employee)man; putePay(); // 调用Employee类中的computePay()方法 putePay();  // 调用Manager类中的computePay()方法 putePay(); // 调用Manager类中的computePay()方法 5.2.3 方法的查找 ——类方法的查找 塑型 l 总是在引用变量声明时所属的类中进行查找 Manager man = new Manager(); Employee emp1 = new Employee();

39、Employee emp2 = (Employee)man; man.expenseAllowance(); //in Manager emp1.expenseAllowance(); //in Employee emp2.expenseAllowance(); //in Employee!!! 5.3 多态的概念 l 多态 l 是指不同类型的对象可以响应相同的消息 l 从相同的基类派生出来的多个类型可被当作同一种类型对待,可对这些不同的类型进行同样的处理,由于多态性,这些不同派生类对象响应同一方法时的行为是有所差别的

40、 l 例如 l 所有的Object类的对象都响应toString()方法 l 所有的BankAccount类的对象都响应deposit()方法 5.3.1 多态的目的 多态的概念 l 多态的目的 l 所有的对象都可被塑型为相同的类型,响应相同的消息 l 使代码变得简单且容易理解 l 使程序具有很好的“扩展性” 5.3.1 多态的目的 ——一个例子 多态的概念 l 绘图——直接的方式 l 希望能够画出任意子类型对象的形状,可以在Shape 类中声明几个绘图方法,对不同的实际对象,采用不同的画法 l if (aShape instan

41、ceof Circle) aShape.drawCircle(); l if (aShape instanceof Triangle) aShape.drawTriangle(); l if (aShape instanceof Rectangle)aShape.drawRectangle(); 5.3.1 多态的目的 ——一个例子 多态的概念 l 绘图——更好的方式 l 在每个子类中都声明同名的draw()方法 l 以后绘图可如下进行 l Shape s = new Circle(); l s.draw(); l Circle

42、属于Shape的一种,系统会执行自动塑型 l 当调用方法draw时,实际调用的是Circle.draw() l 在程序运行时才进行绑定,接下来介绍绑定的概念 5.3.2 绑定的概念 多态的概念 l 绑定 l 指将一个方法调用同一个方法主体连接到一起 l 根据绑定时期的不同,可分为 l 早期绑定 l 程序运行之前执行绑定 l 晚期绑定 l 也叫作“动态绑定”或“运行期绑定 l 基于对象的类别,在程序运行时执行绑定 5.3.2 绑定的概念 ——例5_8 多态的概念 l 仍以绘图为例,所有类都放在binding包中 l 基类Shape建

43、立了一个通用接口 l class Shape { l void draw() {} l void erase() {} l } l 派生类覆盖了draw方法,为每种特殊的几何形状都提供独一无二的行为 l class Circle extends Shape { l void draw() l { System.out.println("Circle.draw()"); } l void erase() l { System.out.println("Circle.erase()"); } l }

44、 5.3.2 绑定的概念 ——例5_8 多态的概念 class Square extends Shape { void draw() { System.out.println("Square.draw()"); } void erase() { System.out.println("Square.erase()"); } } class Triangle extends Shape { void draw() { System.out.println("Triangle.draw()"); }

45、 void erase() { System.out.println("Triangle.erase()"); } } 5.3.2 绑定的概念 ——例5_8 多态的概念 l 对动态绑定进行测试如下 l public class BindingTester{ l public static void main(String[] args) { l Shape[] s = new Shape[9]; l int n; l for(int i = 0; i < s.length; i++)

46、 { l n = (int)(Math.random() * 3); l switch(n) { l case 0: s[i] = new Circle(); break; l case 1: s[i] = new Square(); break; l case 2: s[i] = new Triangle(); l } l } l for(int i

47、 0; i < s.length; i++) s[i].draw(); l } l } 5.3.2 绑定的概念 ——例5_8运行结果 多态的概念 l 运行结果 l Square.draw() l Triangle.draw() l Circle.draw() l Triangle.draw() l Triangle.draw() l Circle.draw() l Square.draw() l Circle.draw() l Triangle.draw() l 说明 l 编译时无法知道s数组元素的具体类型,运行时才能确定类型,所

48、以是动态绑定 l 在主方法的循环体中,每次随机生成指向一个Circle、Square或者Triangle的引用 5.4 多态的应用 多态的概念 l 多态的应用 l 技术基础 l 向上塑型技术:一个父类的引用变量可以指向不同的子类对象 l 动态绑定技术:运行时根据父类引用变量所指对象的实际类型执行相应的子类方法,从而实现多态性 5.4 多态的应用(续) ——例5_9 多态的概念 l 声明一个抽象类Driver及两个子类FemaleDriver及MaleDriver l 在Diver类中声明了抽象方法drives,在两个子类中对这个方法进行了重写

49、 l public abstract class Driver l { l public Driver( ) { } l public abstract void drives( ); l } 5.4 多态的应用(续) ——例5_9 多态的概念 public class FemaleDriver extends Driver { public FemaleDriver( ) { } public void drives( ) { System.out.println("A Female driver drives a vehicle."); } } public class MaleDriver extends Driver { public MaleDriver( ) { } public void drives( ) { System.out.println("A male driver drives a vehicle."); } } 5.4 多态的应用(续) ——例5_9 多态的概念 l public class Test1 l { l static public void main(Str

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服