




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章继承与多态,主要内容:继承多态接口和包,继承,继承:子类利用父类中定义的方法和变量就像它们属于子类本身一样;(包括父类的私有属性、私有方法,但不可见);单重继承:一个类只能有一个父类(Java、C#、VC+);多重继承:一个类可以有多个父类(标准C+);,图5-1各种电话卡类及其间继承关系,继承的优点、目的,优点:更有效地组织程序结构,明确类间关系;目的:使程序结构清晰,提高开发效率,降低编码和维护工作量。,派生子类,例5-1PhoneCard类及其派生子类abstractclassPhoneCardabstractclassNone_Number_PhoneCardextendsPnoneCardabstractclassNumber_PhoneCardextendsPnoneCard问题:第二行、第三行的类为什么是抽象类,能否去掉abstract关键字?,域的继承,子类继承(拥用)父类的所有非私有(P9192页各类拥有的域);,域的隐藏,子类重新定义一个从父类继承来的域变量(可以具有不同类型),称为域的隐藏(指新定义的域变量隐藏了父类的同名变量)。举例:例5-2的简化版;,abstractclassAdoublem_a;abstractdoublesub();doubleget()returnm_a;classBextendsAdoublem_a;doublesub()m_a-=1;returnm_a;doublesuper_sub()super.m_a-=1;returnsuper.m_a;,publicclassApplication1publicstaticvoidmain(Stringargs)Bb=newB();b.m_a=100;System.out.println(b.get();System.out.println(b.sub();System.out.println(b.super_sub();输出为:099-1;,b.m_a=100;b.get()b.sub()b.super_sub(),问题:以下程序访问的是父类还是子类?,要点:1)被隐藏的父类域在子类对象中仍占有独立的内存空间;2)子类可通过super关键字或继承自父类的方法访问或处理继承自父类的域。,方法的继承与覆盖,继承:子类可继承父类的所有非私有方法;覆盖(Override):子类重新定义与父类同名的方法(指非静态方法,要求方法名、返回值和参数列表完全相同);如果子类的非抽象方法覆盖了父类的抽象方法,称子类“实现”了父类的抽象方法。,abstractclassAdoublem_a;abstractdoublesub();doubleget()returnm_a;classBextendsAdoublem_a;doublesub()m_a-=1;returnm_a;doublesuper_sub()super.m_a-=1;returnsuper.m_a;doubleget()returnm_a;,/测试publicclassApplication1publicstaticvoidmain(Stringargs)Bb=newB();b.m_a=100;System.out.println(b.get();输出为:100,例域的隐藏、方法覆盖、方法重载classPoint/父类intx=0,y=0;voidmove(intdx,intdy)x+=dx;y+=dy;classRealPointextendsPoint/子类floatx=0.0f,y=0.0f;/域的隐藏voidmove(intdx,intdy)/方法的覆盖System.out.println(subclasssmove);move(float)dx,(float)dy);voidmove(floatdx,floatdy)/方法的重载x+=dx;y+=dy;,publicclassApplication1publicstaticvoidmain(Stringargs)RealPointrp=newRealPoint();System.out.println(x:+rp.x+y:+rp.y);rp.move(1,1);System.out.println(x:+rp.x+y:+rp.y);输出:x:0.0y:0.0subclasssmovex:1.0y:1.0,this,对当前对象的引用;作用:1)调用当前对象的方法或域;如:classPointintx=0,y=0;voidmove(intx,inty)this.x+=x;this.y+=y;2)作为参数传递给其他对象或方法如:input.addActionListener(this);,super对当前对象的父类对象的引用;作用:1)在构造函数定义中用super(参数列表)调用父类的构造函数;publicclassappleextendsfruitspublicapple(intprice)super(price);2)用super.域名引用父类的域;例5-5testSuper.java(第100页)问题:第六行:my200.balance=50是访问的哪一个类的balance?第七行:my200.getBalance()是访问的父类还是子类的函数?访问的是父类还是子类的变量?,classSuperClassintx;.classSubClassextendsSuperClassinty;.,父类对象与子类对象的转换,PublicclassUseSuperSubSuperClasssc,sc_ref;SubClasssb,sb_ref;sc=newSuperClass();sb=newSubClass();sc_ref=sb;/对还是错?/父类引用可以指向子类对象;sb_ref=sc;/对还是错?/错,子类对象不能赋给父类引用;,classSuperClassintx;.,classSubClassextendsSuperClassinty;.,inta=sc_ref.x;/对或错?/对,以子类对象作为实际参数访问父类变量;sb_ref=(SubClass)sc_ref;/对或错?/对,父类引用强制转换成子类引用;sb_ref=(SubClass)sc;/对或错?/编译通过,但接着用sb_ref.y则错;,classSuperClassintx;.,classSubClassextendsSuperClassinty;.,父类对象与子类对象的转换子类对象可以看作是其父类的对象;父类对象不能被当作是其某一个子类的对象;如果某个方法的形式参数是父类对象,可以使用子类对象作为实际参数;如果父类对象引用指向的实际是子类对象,可以采用强制类型转换将父类对象引用转化成子类对象引用;,引例:函数功能:取绝对值(每一种类型对应一个函数)整数:inti_abs(inti);单精度:floatf_abs(floatf);双精度:doubled_abs(doubled);面向对象:Math.abs(inti);Math.abs(floatf);Math.abs(doubled);,多态(polymophism),多态(polymophism),指的是一个程序(在同一个类或不同类中)包含多个名称相同、但功能或具体实现不同的方法;主要通过方法的覆盖(不同类)、重载(同一类)实现;,电话卡域:剩余金额方法:拨打电话查询金额,无卡号电话卡域:电话机型号方法:获得电话机型号,有卡号电话卡域:卡号,密码,接入号码,接通方法:登录交换机,IP卡域:有效时间方法:拨打电话,200卡域:附加费用方法:拨打电话修改密码,电话IC卡方法:拨打电话,电话磁卡域:使用地域方法:拨打电话,继承,继承,继承,继承,继承,继承,拨打电话函数在各子类中得到覆盖,同一个类中定义多个同名的方法(条件:形式参数个数、类型和顺序不同);publicclassMyClasspublicstaticintabs(intp)returnMath.abs(p);publicstaticlongabs(longp)returnMath.abs(p);publicstaticdoubleabs(doublep)returnMath.abs(p);,重载(overload),优点:1)提高程序的简洁性;2)通过接口操纵对象;P104/例5-6TestOverride.java问题:这个例子是重载还是覆盖?在哪两个函数体现?P51/booleanperformDial()P63/booleanperformDial(longcn,intpass),构造函数重载,同一类中存在多个具有不同参数列表的构造函数;例:P107;(参数的数目、类型、顺序不同)例:P108;(构造函数的互相调用)目的:满足对象的不同初始化需求。,构造函数继承,子类构造函数总是先调用父类的构造函数;原则:子类继承父类无参构造函数;子类未显式地调用父类的构造函数,实则先调用父类的无参数构造函数;子类显示调用父类的带参数构造函数(第一句);,设计总结不定义构造函数(缺省构造函数);定义构造函数,并调用父类的带参构造函数;D200_Card(longcn,intpass,doubleb,doublea)super(cn,pass,b);/必须是第一句additoryFee=a;,重载,实现多层次对象初始化;D200_Card(longcn,intpass,doublea)D200_Card(longcn,intpass,doubleb,doublea)P110/例5-7ConstructorOverride.java问题:共调用了几个构造函数?,包package包名;例packageA;packageA.B;作用:默认的访问规则:在同一程序包中出现的类才可以直接使用它的数据和方法。组织和管理文件的方式:用以存放该包中所有类文件(.Class);,包的引用,1)使用包名、类名前缀如:classmyAppletextendsjava.applet.Applet;java.awt.Buttonbtn=newjava.awt.Button(“启动”);注:此方式是完整引用形式,但程序书写不简洁;2)加载需要使用的类(以后的程序可采用省略的书写方式)如:importjava.applet.Applet;classmyAppletextendsApplet;,3)加载整个包如:importjava.applet.*;假设有两个类:java.awt.Button、java.sw.Button;java.awt.Buttonbtn=newjava.awt.Button();java.sw.Buttonbtn=newjava.sw.Button();importjava.awt.Button;Buttonbtn=newButton();,CLASSPATH环境变量作用:指明所有缺省的类字节码文件路径(实验一);(1)通过autoexec.bat文件或DOS命令设置,如:setCLASSPATH=.;c:jdk1.2lib;c:jdk1.2lib.classes.zip;其中,用“;”号隔开的各部分就是可能的路径。,5.7接口(interface)定义:用来实现若干特定功能的一组对外接口和规范;属性:只能是常量;方法:只能是抽象方法;目的:实现多重继承;,声明接口接口的特征:由常量和抽象方法组成的特殊类;语法:publicinterface接口名extends父接口名列表/常量域声明publicstaticfinal域类型域名=常量表;/抽象方法声明publicabstractnative返回值方法名(参数列表)throw异常列表;,P100:系统接口DataInput的定义:publicinterfacejava.io.DataInputpublicabstractbooleanreadBoolean();publicabstractbytereadByte();publicabstractcharreadChar();publicabstractDoublereadDouble();,P119:ActionListener定义:publicabstractinterfaceActionListenerextendsEventListenerpublicvoidactionPerformed(ActionEvente);,接口特点接口与抽象类相似,不能被实例化;接口也具有继承性,可通过extends关键字声明它的父接口,并继承父接口的所有属性和方法;与类不同,一个接口可有多个父接口;属性都是用publicfinalstatic修饰的常量;方法都是用publicabstract修饰的抽象方法;方法体也可以用非Java语言书写(由native修饰);,实现接口
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-河南-河南药剂员四级(中级工)历年参考题库含答案解析
- 2024版医用口罩采购合同范本
- 2024版工程项目管理人员聘用合同
- 2025年事业单位工勤技能-河北-河北计算机信息处理员一级高级技师历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-河北-河北水利机械运行维护工一级(高级技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-河北-河北地质勘查员四级(中级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-河北-河北保健按摩师四级(中级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-江苏-江苏有线广播电视机务员四级(中级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江苏-江苏公路养护工一级(高级技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西机械冷加工五级(初级工)历年参考题库含答案解析
- 2025年交规考试宝典
- 家长外出务工委托亲戚照顾孩子全托合同协议书
- 华为SDBE领先模型:闭环战略管理的全面解析-2024-12-组织管理
- 2024版中式烧烤加盟经营合作协议书3篇
- 生物安全管理手册
- GB/T 11263-2024热轧H型钢和剖分T型钢
- DB11-T 1894-2021 10kV及以下配电网设施配置技术规范
- 沪教深圳版八年级英语下册单词表
- 变岗调薪协议书模板
- 环境监测与污染源在线监控考核试卷
- 青贮饲料创业项目计划书
评论
0/150
提交评论