




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 5 章 继承与多态,主要内容: 继承 多态 接口和包,继 承,继承:子类利用父类中定义的方法和变量就像它们属于子类本身一样; (包括父类的私有属性、私有方法,但不可见); 单重继承:一个类只能有一个父类(Java、C#、VC+); 多重继承:一个类可以有多个父类(标准C+);,图 5-1 各种电话卡类及其间继承关系,继承的 优点、目的,优点:更有效地组织程序结构,明确类间关系; 目的:使程序结构清晰,提高开发效率,降低编码和维护工作量。,派 生 子 类,例5-1PhoneCard 类及其派生子类 abstract class PhoneCard abstract class None_Number_PhoneCard extends PnoneCard abstract class Number_PhoneCard extends PnoneCard 问题:第二行、第三行的类为什么是抽象类,能否去掉 abstract 关键字?,域 的 继 承,子类继承(拥用)父类的所有非私有(P9192页各类拥有的域);,域 的 隐 藏,子类重新定义一个从父类继承来的域变量(可以具有不同类型),称为域的隐藏(指新定义的域变量隐藏了父类的同名变量)。 举例:例5-2的简化版;,abstract class A double m_a; abstract double sub(); double get() return m_a; class B extends A double m_a; double sub() m_a -=1; return m_a; double super_sub() super.m_a -=1; return super.m_a; ,public class Application1 public static void main(String args) B b = new B(); b.m_a = 100; System.out.println(b.get(); System.out.println(b.sub(); System.out.println(b.super_sub(); 输出为: 0 99 -1;,b.m_a = 100; b.get() b.sub() b.super_sub(),问题:以下程序访问的是父类还是子类?,要点: 1)被隐藏的父类域在子类对象中仍占有独立的内存空间; 2)子类可通过 super 关键字或继承自父类的方法访问或处理继承自父类的域。,方法的 继承 与 覆盖,继承:子类可继承父类的所有非私有方法; 覆盖(Override):子类重新定义与父类同名的方法(指非静态方法,要求方法名、返回值和参数列表完全相同); 如果子类的非抽象方法覆盖了父类的抽象方法,称子类“实现”了父类的抽象方法。,abstract class A double m_a; abstract double sub(); double get() return m_a; class B extends A double m_a; double sub() m_a -=1; return m_a; double super_sub() super.m_a -=1; return super.m_a; double get() return m_a; ,/测试 public class Application1 public static void main (String args) B b = new B(); b.m_a = 100; System.out.println(b.get(); 输出为:100,例域的隐藏、方法覆盖、方法重载 class Point / 父类 int x = 0, y = 0 ; void move(int dx, int dy) x += dx ; y += dy ; class RealPoint extends Point / 子类 float x = 0.0f, y = 0.0f ; / 域的隐藏 void move(int dx, int dy) / 方法的覆盖 System.out.println(“subclasss move“); move(float)dx, (float)dy); void move(float dx, float dy) / 方法的重载 x += dx; y += dy; ,public class Application1 public static void main(String args) RealPoint rp = new RealPoint(); System.out.println(“x:“ + rp.x + “ y:“ + rp.y); rp.move(1,1); System.out.println(“x:“ + rp.x + “ y:“ + rp.y); 输出: x:0.0 y:0.0 subclasss move x:1.0 y:1.0,this,对当前对象的引用; 作用:1)调用当前对象的方法或域; 如:class Point int x = 0, y = 0 ; void move(int x, int y) this.x += x ; this.y += y ; 2)作为参数传递给其他对象或方法 如: input . addActionListener ( this ) ;,super 对当前对象的父类对象的引用; 作用:1)在构造函数定义中用 super(参数列表) 调用父类的构造函数; public class apple extends fruits public apple(int price) super(price); 2)用super . 域名 引用父类的域; 例5-5 testSuper.java(第100页) 问题:第六行:my200.balance = 50是访问的哪一个类的balance? 第七行:my200.getBalance()是访问的父类还是子类的函数?访问的是父类还是子类的变量?,class SuperClass int x; . class SubClass extends SuperClass int y; . ,父类对象与子类对象的转换,Public class UseSuperSub SuperClass sc,sc_ref; SubClass sb,sb_ref; sc = new SuperClass(); sb = new SubClass(); sc_ref = sb; / 对还是错? / 父类引用可以指向子类对象; sb_ref = sc; / 对还是错? / 错,子类对象不能赋给父类引用;,class SuperClass int x; . ,class SubClass extends SuperClass int y; . ,int a = sc_ref.x; / 对或错? / 对,以子类对象作为实际参数访问父类变量; sb_ref = (SubClass) sc_ref;/对或错? / 对,父类引用强制转换成子类引用; sb_ref = (SubClass)sc; / 对或错? / 编译通过,但接着用sb_ref.y则错; ,class SuperClass int x; . ,class SubClass extends SuperClass int y; . ,父类对象与子类对象的转换 子类对象可以看作是其父类的对象; 父类对象不能被当作是其某一个子类的对象; 如果某个方法的形式参数是父类对象,可以使用子类对象作为实际参数; 如果父类对象引用指向的实际是子类对象,可以采用强制类型转换将父类对象引用转化成子类对象引用;,引例: 函数功能:取绝对值(每一种类型对应一个函数) 整数: int i_abs(int i); 单精度: float f_abs(float f); 双精度: double d_abs(double d); 面向对象: Math.abs( int i ); Math.abs( float f ); Math.abs( double d );,多态 ( polymophism ),多态 ( polymophism ),指的是一个程序(在同一个类或不同类中)包含多个名称相同、但功能或具体实现不同的方法; 主要通过方法的覆盖(不同类)、重载(同一类)实现;,电话卡 域:剩余金额 方法:拨打电话 查询金额,无卡号电话卡 域:电话机型号 方法:获得 电话机型号,有卡号电话卡 域:卡号,密码, 接入号码,接通 方法:登录交换机,IP 卡 域:有效时间 方法:拨打电话,200 卡 域:附加费用 方法:拨打电话 修改密码,电话 IC 卡 方法:拨打电话,电话磁卡 域:使用地域 方法:拨打电话,继承,继承,继承,继承,继承,继承,拨打电话函数在各子类中得到覆盖,同一个类中定义多个同名的方法(条件:形式参数个数、类型和顺序不同); public class MyClass public static int abs(int p) return Math.abs(p); public static long abs(long p) return Math.abs(p); public static double abs(double p) return Math.abs(p); ,重载(overload),优点: 1)提高程序的简洁性; 2)通过接口操纵对象; P104/例5-6TestOverride.java 问题:这个例子是重载还是覆盖?在哪两个函数体现? P51 / boolean performDial() P63/ boolean performDial(long cn, int pass),构造函数 重载,同一类中存在多个具有不同参数列表的构造函数; 例:P107;(参数的数目、类型、顺序不同) 例:P108;(构造函数的互相调用) 目的:满足对象的不同初始化需求。,构造函数 继承,子类构造函数总是先调用父类的构造函数; 原则: 子类继承父类无参构造函数; 子类未显式地调用父类的构造函数,实则先调用父类的无参数构造函数; 子类显示调用父类的带参数构造函数(第一句);,设计总结 不定义构造函数(缺省构造函数); 定义构造函数,并调用父类的带参构造函数; D200_Card( long cn, int pass, double b, double a) super(cn, pass, b);/必须是第一句 additoryFee = a; ,重载,实现多层次对象初始化; D200_Card( long cn, int pass, double a) D200_Card( long cn, int pass, double b, double a) P110/例5-7 ConstructorOverride.java问题:共调用了几个构造函数?,包 package 包名; 例 package A ; package A.B ; 作用: 默认的访问规则:在同一程序包中出现的类才可以直接使用它的数据和方法。 组织和管理文件的方式:用以存放该包中所有类文件(. Class);,包 的引用,1) 使用包名、类名前缀 如:class myApplet extends java.applet.Applet; java.awt.Button btn = new java.awt.Button(“启动”) ; 注:此方式是完整引用形式,但程序书写不简洁; 2) 加载需要使用的类(以后的程序可采用省略的书写方式) 如: import java.applet.Applet; class myApplet extends Applet;,3) 加载整个包 如: import java . applet .* ; 假设有两个类:java.awt.Button、 java.sw.Button; java.awt.Button btn = new java.awt.Button() ; java.sw.Button btn = new java.sw.Button() ; import java.awt.Button; Button btn = new Button() ;,CLASSPATH 环境变量 作用:指明所有缺省的类字节码文件路径(实验一); (1)通过 autoexec.bat 文件或 DOS 命令设置,如: set CLASSPATH= . ; c:jdk1.2lib ; c:jdk1.2lib.classes.zip ; 其中,用“;”号隔开的各部分就是可能的路径。,5.7 接口(interface) 定义:用来实现若干特定功能的一组对外接口和规范; 属性:只能是常量; 方法:只能是抽象方法; 目的:实现多重继承;,声明 接口 接口的特征:由常量和抽象方法组成的特殊类; 语法: public interface 接口名 extends 父接口名列表 / 常量域声明 public static final 域类型 域名 = 常量表; / 抽象方法声明 public abstract native 返回值 方法名(参数列表)throw 异常列表;,P100:系统接口 DataInput 的定义: public interface java.io.DataInput public abstract boolean readBoolean ( ); public abstract byte readByte ( ); public abstract char readChar ( ); public abstract Double readDouble ( ); ,P119:A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 装车协议书范本
- 装修合同安全免责协议
- 芹菜苗购销合同协议
- 融资方式投资合同协议
- 虚拟物品交易合同协议
- 装修移门订单合同协议
- 荒废苗木清除合同协议
- 西安粮食租赁合同协议
- 街道土地流转合同协议
- 补充协议挂错主合同
- 2024年湖南省长沙市中考英语真题(原卷版)
- 2025年高三高考冲刺主题教育班会:《高三考前心理调适指南:减压赋能 轻松备考》-2024-2025学年高中主题班会课件
- 2025年安全生产考试题库(消防安全应急处置)消防设施运行维护试题
- 九一八事变课件
- 鄂尔多斯市水发燃气有限公司招聘笔试真题2024
- 2024游泳救生员具体考试内容及试题及答案
- 2025年临海市纪委市监委下属事业单位公开选聘工作人员1人笔试备考题库及答案解析
- 河北省唐山市、廊坊市2025年高三高考第二次模拟演练思想政治试卷(含答案)
- 2025年春季江东控股集团有限责任公司社会招聘15人(安徽)笔试参考题库附带答案详解
- 湖北武汉市华中师大一附中2025届高三3月押轴试题物理试题试卷含解析
- 人教版(2024)七年级下册英语期中质量检测试卷(含答案)
评论
0/150
提交评论