版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国塑料齿轮行业行情走势分析及前景动态研究报告
- 网络工程职业发展指南
- 2026年国家心理咨询师预测考点题库真题及答案
- 2025年湖南岳阳市初二学业水平地理生物会考考试题库(附含答案)
- 2025年广东湛江市初二地理生物会考真题试卷+解析及答案
- 2025年湖北随州市地理生物会考真题试卷+解析及答案
- 2025年西藏自治区地理生物会考试卷题库及答案
- 个人下一年职业发展规划演讲稿模版
- 西藏自治区拉萨市2025-2026学年高二语文上学期期末联考试题
- 医院护理护理服务品牌建设
- (二模)石家庄市2026届普通高中高三毕业年级教学质量检测(二)数学试卷(含答案详解)
- 喷雾扬尘施工方案(3篇)
- 2026年西部计划志愿者招募考试题及答案
- 2026天津市面向西藏自治区昌都籍未就业少数民族高校毕业生招聘事业单位工作人员30人建设笔试备考试题及答案解析
- √高考英语688高频词21天背诵计划-词义-音标-速记
- 《原发性肝癌诊疗指南(2026年版)》解读课件
- 国家事业单位招聘2023中国艺术研究院招聘22人笔试历年参考题库典型考点附带答案详解
- 2026年医疗器械专业知识培训试题及答案
- 部编人教版中考语文试卷分类汇编口语交际与综合性学习
- 99S203 消防水泵接合器安装图集
- 路面施工技术全套课件
评论
0/150
提交评论