Java语言与面向对象程序设计(第二版)课件第五章.ppt

上传人:max****ui 文档编号:8306343 上传时间:2020-03-28 格式:PPT 页数:42 大小:398KB
返回 下载 相关 举报
Java语言与面向对象程序设计(第二版)课件第五章.ppt_第1页
第1页 / 共42页
Java语言与面向对象程序设计(第二版)课件第五章.ppt_第2页
第2页 / 共42页
Java语言与面向对象程序设计(第二版)课件第五章.ppt_第3页
第3页 / 共42页
点击查看更多>>
资源描述
第5章继承与多态 主要内容 继承多态接口和包 继承 继承 子类利用父类中定义的方法和变量就像它们属于子类本身一样 包括父类的私有属性 私有方法 但不可见 单重继承 一个类只能有一个父类 Java C VC 多重继承 一个类可以有多个父类 标准C 图5 1各种电话卡类及其间继承关系 继承的优点 目的 优点 更有效地组织程序结构 明确类间关系 目的 使程序结构清晰 提高开发效率 降低编码和维护工作量 派生子类 例5 1 PhoneCard类及其派生子类abstractclassPhoneCardabstractclassNone Number PhoneCardextendsPnoneCardabstractclassNumber PhoneCardextendsPnoneCard问题 第二行 第三行的类为什么是抽象类 能否去掉abstract关键字 域的继承 子类继承 拥用 父类的所有非私有 P91 92页各类拥有的域 域的隐藏 子类重新定义一个从父类继承来的域变量 可以具有不同类型 称为域的隐藏 指新定义的域变量隐藏了父类的同名变量 举例 例5 2 的简化版 abstractclassA doublem a abstractdoublesub doubleget returnm a classBextendsA doublem a doublesub m a 1 returnm a doublesuper sub super m a 1 returnsuper m a publicclassApplication1 publicstaticvoidmain String args 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 子类重新定义与父类同名的方法 指非静态方法 要求方法名 返回值和参数列表完全相同 如果子类的非抽象方法覆盖了父类的抽象方法 称子类 实现 了父类的抽象方法 abstractclassA doublem a abstractdoublesub doubleget returnm a classBextendsA doublem a doublesub m a 1 returnm a doublesuper sub super m a 1 returnsuper m a doubleget returnm a 测试publicclassApplication1 publicstaticvoidmain String args 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 subclass smove move float dx float dy voidmove floatdx floatdy 方法的重载 x dx y dy publicclassApplication1 publicstaticvoidmain String args 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 0subclass smovex 1 0y 1 0 this 对当前对象的引用 作用 1 调用当前对象的方法或域 如 classPoint intx 0 y 0 voidmove intx inty this x x this y y 2 作为参数传递给其他对象或方法如 input addActionListener this super对当前对象的父类对象的引用 作用 1 在构造函数定义中用super 参数列表 调用父类的构造函数 publicclassappleextendsfruits publicapple intprice super price 2 用super 域名引用父类的域 例5 5 testSuper java 第100页 问题 第六行 my200 balance 50是访问的哪一个类的balance 第七行 my200 getBalance 是访问的父类还是子类的函数 访问的是父类还是子类的变量 classSuperClass intx classSubClassextendsSuperClass inty 父类对象与子类对象的转换 PublicclassUseSuperSub SuperClasssc sc ref SubClasssb sb ref sc newSuperClass sb newSubClass sc ref sb 对还是错 父类引用可以指向子类对象 sb ref sc 对还是错 错 子类对象不能赋给父类引用 classSuperClass intx classSubClassextendsSuperClass inty inta sc ref x 对或错 对 以子类对象作为实际参数访问父类变量 sb ref SubClass sc ref 对或错 对 父类引用强制转换成子类引用 sb ref SubClass sc 对或错 编译通过 但接着用sb ref y则错 classSuperClass intx classSubClassextendsSuperClass inty 父类对象与子类对象的转换子类对象可以看作是其父类的对象 父类对象不能被当作是其某一个子类的对象 如果某个方法的形式参数是父类对象 可以使用子类对象作为实际参数 如果父类对象引用指向的实际是子类对象 可以采用强制类型转换将父类对象引用转化成子类对象引用 引例 函数功能 取绝对值 每一种类型对应一个函数 整数 inti abs inti 单精度 floatf abs floatf 双精度 doubled abs doubled 面向对象 Math abs inti Math abs floatf Math abs doubled 多态 polymophism 多态 polymophism 指的是一个程序 在同一个类或不同类中 包含多个名称相同 但功能或具体实现不同的方法 主要通过方法的覆盖 不同类 重载 同一类 实现 电话卡域 剩余金额方法 拨打电话查询金额 无卡号电话卡域 电话机型号方法 获得电话机型号 有卡号电话卡域 卡号 密码 接入号码 接通方法 登录交换机 IP卡域 有效时间方法 拨打电话 200卡域 附加费用方法 拨打电话修改密码 电话IC卡方法 拨打电话 电话磁卡域 使用地域方法 拨打电话 继承 继承 继承 继承 继承 继承 拨打电话函数在各子类中得到覆盖 同一个类中定义多个同名的方法 条件 形式参数个数 类型和顺序不同 publicclassMyClass publicstaticintabs intp returnMath abs p publicstaticlongabs longp returnMath abs p publicstaticdoubleabs doublep returnMath abs p 重载 overload 优点 1 提高程序的简洁性 2 通过接口操纵对象 P104 例5 6 TestOverride 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 7 ConstructorOverride 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 2 lib c jdk1 2 lib classes zip 其中 用 号隔开的各部分就是可能的路径 5 7接口 interface 定义 用来实现若干特定功能的一组对外接口和规范 属性 只能是常量 方法 只能是抽象方法 目的 实现多重继承 声明接口接口的特征 由常量和抽象方法组成的特殊类 语法 public interface接口名 extends父接口名列表 常量域声明 public static final 域类型域名 常量表 抽象方法声明 public abstract native 返回值方法名 参数列表 throw异常列表 P100 系统接口DataInput的定义 publicinterfacejava io DataInput publicabstractbooleanreadBoolean publicabstractbytereadByte publicabstractcharreadChar publicabstractDoublereadDouble P119 ActionListener定义 publicabstractinterfaceActionListenerextendsEventListener publicvoidactionPerformed ActionEvente 接口特点接口与抽象类相似 不能被实例化 接口也具有继承性 可通过extends关键字声明它的父接口 并继承父接口的所有属性和方法 与类不同 一个接口可有多个父接口 属性都是用publicfinalstatic修饰的常量 方法都是用publicabstract修饰的抽象方法 方法体也可以用非Java语言书写 由native修饰 实现接口注意事项 在类的声明部分 要用implements关键字声明要实现的接口列表 在实现接口时 必须使用完全相同的方法头 在实现接口时 必须显式使用public修饰符 interfaceStack voidpush objectx objectpop classAextendsAppletimplementsStack voidpush objectx 具体内容 objectpop 具体内容 小结 域的隐藏方法的继承与覆盖关键字 this super重点 父类对象与子类对象的转换多态 重载包的作用接口的继承 实现 练习 P121 5 3 5 12
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!