付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1、知识点:对象多态性1、 对象的向上2、 对象的向下;。2、具体内容在讲解对象的操作之前首先来观察以下的一段代码。方法的覆写为对象多态性的最重要支持,于是下面就可以给出对象多态性的操作方式,分为两类:对象的向上|- 自动完成;对象的向下:父类名称 对象名称 = 子类实例化对象;:子类名称 对象名称 = (子类名称) 父类对象;|- 强制完成,强制完成就会造成风险。范例:对象向上第(1)页 共(8)页class A class A public void fun() System.out.prln(A public void fun() ;class B extends A public vo
2、id fun() System.out.prln(Bpublic void fun() ;class C extends A public void fun() System.out.prln(Cpublic void fun() ;public class TestDemo public sic void main(String args) B b = new B() ;C c = new C() ;b.fun() ;c.fun() ;同一个对象根据实例化其子类的不同,同一个方法可以完成不同的功能。范例:实现向下第(2)页 共(8)页class A public void fun() Sys
3、tem.out.prln(A public void fun() ;class B extends A public void fun() System.out.prln(Bpublic void fun() ;class C extends A public void fun() System.out.prln(Cpublic void fun() ;public class TestDemo public sic void main(String args) / 父类 父类对象 = new 子类() ; A a = new B() ;/ 子类 子类对象 = (子类) 实例化对象B b =
4、(B) a ;b.fun() ;public void fun() System.out.prln(A public void fun() ;class B extends A public void fun() System.out.prln(Bpublic void fun() ;class C extends A public void fun() System.out.prln(Cpublic void fun() ;public class TestDemo public sic void main(String args) / 父类 父类对象 = new 子类() ; A a =
5、new B() ;a.fun() ;但是在进行对象向下时是会存在有风险的,譬如:来观察以下的程序。此时没有语法错误,但是执行的时候出现了错误:对于开发而言,NullPoerException 最为常见的异常,而 ClassCastException 指的对象的转换异常,即:两个没有关系的对象发生了错误的转换操作。结论:在对象发生向下操作之前,一定要首先发生对象的向上,建立好关系后才可以正常使用,关于对象的实际使用情况:向上:90%,在大部分情况下使用的全部都是对象的向上;向下:3%,很少会使用向下,因为只有在使用子类特殊功能的时候才会考虑向下;不:7%,String。什么叫类的特殊功能?子类的
6、主要功能是进行父类功能的扩充,所以下面就通过扩充来演示何为子类的特殊操作需要进行向下。第(3)页 共(8)页class A public void fun() System.out.prln(A public void fun() ;Exceptionhread main java.lang.ClassCastException: A cannot be cast to Bat TestDemo.maestDemo.java:19)class A public void fun() System.out.prln(A public void fun() ;class B extends A p
7、ublic void fun() System.out.prln(Bpublic void fun() ;class C extends A public void fun() System.out.prln(Cpublic void fun() ;public class TestDemo public sic void main(String args) A a = new A() ;/ 实例化父类对象B b = (B) a ; / 向下b.fun() ;从开发的角度来讲,对于子类的特殊功能,强烈建议:如果能不调用就不调用,如果非要调用,那么请的父类设计的足够完善。在开发之中 90%的情况
8、下,子类之中所定义的方法是与父类中所定义的方法完全相同的。第(4)页共(8)页class A public void fun() System.out.prln(A public void fun() ;class B extends A public void fun() /方法this.prB() ; / 向方法上靠拢System.out.prln(Bpublic void fun() ;/ 是子类扩充的方法public void prB() / 非方法System.out.prln(B public void prB() ;class C extends A class B extend
9、s A public void fun() System.out.prln(Bpublic void fun() ;/ 是子类扩充的方法public void prB() System.out.prln(B public void prB() ;class C extends A public void fun() System.out.prln(Cpublic void fun() ;public class TestDemo public sic void main(String args) A a = new B() ;/ 向上 a.fun() ;B b = (B) a ; / 向下b.
10、prB() ;另外,在进行对象的向下操作之中会发现是存在有安全隐患的,所以为了避免这种情况的发生,在 java 中提供了一个 instanceof 的关键字,此关键字的作用是判断某一个对象是否为某一个类的实例,语法如下:第(5)页 共(8)页class A public void fun() System.out.prln(A public void fun() ;class B extends A public void fun() /方法this.prB() ; / 向方法上靠拢System.out.prln(Bpublic void fun() ;/ 是子类扩充的方法public voi
11、d prB() / 非方法System.out.prln(B public void prB() ;class C extends A public void fun() System.out.prln(Cpublic void fun() ;public class TestDemo public sic void main(String args) A a = new B() ;/ 向上 System.out.prln(a instanceof A) ;System.out.prln(a instanceof B) ;if (a instanceof B) / 如果是 B 类实例B b =
12、 (B) a ; / 向下b.prB() ;对象 instanceof 类 返回的是型数据public void fun() System.out.prln(Cpublic void fun() ;public class TestDemo public sic void main(String args) A a = new B() ;/ 向上 a.fun() ;如果要想编写更安全的代码,则在以后进行对象向下时,都要利用 instanceof 实现判断。疑问?怎么使用对象多态性,下面通过一个简单的程序模拟一下,譬如:现在要求定义一个方法,此方法之中可以传递 A 类的任意子类对象。面对这样的实
13、现,如果不使用对象多态性,那么可以利用方法的重载完成。但是如果说现在 A 类有 5000W 个子类,并且还可能随时进行各种扩充,这种代码写不了了。最麻烦的事情是参数没有。范例:利用对象多态性来解决第(6)页 共(8)页class A class A public void fun() System.out.prln(A public void fun() ;class B extends A public void fun() /方法this.prB() ; / 向方法上靠拢System.out.prln(Bpublic void fun() ;/ 是子类扩充的方法public void pr
14、B() / 非方法System.out.prln(B public void prB() ;class C extends A public void fun() System.out.prln(Cpublic void fun() ;public class TestDemo public sic void main(String args) get(new B() ;get(new C() ;public sic void get(B b) b.fun() ;public sic void get(C c) c.fun() ;不管有多少个子类,get()方法接收的是父类对象,所以参数得到了
15、中,父类一定要优先考虑设计完整。,也就是说在日后的开发之通过本节的内容相信大家已经清楚了对象多态性的基本操作语法,在开发之中一定要本着尽量使用向上的操作原则,同时对象多态性,作为日后课程内容的重要组成,一定要将其基本使用原则掌握熟练。第(7)页 共(8)页public void fun() System.out.prln(A public void fun() ;class B extends A public void fun() /方法this.prB() ; / 向方法上靠拢System.out.prln(Bpublic void fun() ;/ 是子类扩充的方法public void prB() / 非方
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学生晨午检制度考核细则
- 物业管理区域物业服务审计管理细则
- 教育局对减轻教师不合理工作负担的自查报告
- 交通安全知识比赛题库(附答案)
- 烟草仓储保管养护工作手册
- 标记员作业安全防护用品使用手册
- 娱乐场所管理与服务规范指南
- 涡轮风扇发动机设计工作手册
- 养殖场配种信息化管理手册
- 地质勘探水文地质调查与评价实施指导手册
- 2026江苏镇江市总工会集中招录工会社会工作者11人笔试参考题库及答案详解
- 2026年江苏省保安员考试试题带解析含完整答案
- 2025-2026学年小学英语的教学活动设计
- 闪蒸罐设计计算书
- 中小学教师超课时补贴与临时代课费管理办法(2026年修订)
- 《黑龙江省超低能耗建筑评审信息表》
- 护理差错事故的根因分析(RCA)
- 2025年贵州锦麟化工有限责任公司公开招聘13人笔试历年参考题库附带答案详解
- 成都湔江投资集团有限公司2026年春季第一批次招聘考试参考题库及答案解析
- 2026公需课人工智能赋能制造业高质量发展试题及答案.backup
- 药物检测滥用制度
评论
0/150
提交评论