Java-面向对象(高级篇)--对象的多态性.docx_第1页
Java-面向对象(高级篇)--对象的多态性.docx_第2页
Java-面向对象(高级篇)--对象的多态性.docx_第3页
Java-面向对象(高级篇)--对象的多态性.docx_第4页
Java-面向对象(高级篇)--对象的多态性.docx_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

对象的多态性对象多态性在面向对象中是一个最重要的概念,在Java中主要有两种体现形式:1. 方法的重载和覆写2. 对象的多态性对于方法的重载和覆写在之前的讲解中,下面将重点介绍对象的的多态性。对象的多态性主要分为以下两种类型:(1) 向上转型:子类对象父类对象;(2) 向下转型:父类对象子类对象;对于向上转型,程序会自动完成,而对于向下转型时,必须明确的指明要转型的子类类型,格式如下:对象向上转型:父类 父类对象 = 子类实例;对象向下转型:子类 子类对象 = (子类)父类对象;下面进行对象向上转型的操作:【对象向上转型】class Apublic void fun1()System.out.println(A-public void fun1();public void fun2()this.fun1();class B extends A/覆写A中的方法public void fun1()System.out.println(B-public void fun()1);/子类中自己定义的方法public void fun3()System.out.println(B-oublic void fun3();public class PolDemo01public static void main(String args)B b=new B();/定义子类实例化对象A a=b;/发生了向上转型的关系,子类-父类a.fun1();/此方法被子类覆盖程序运行结果:B-public void fun()1以上程序就是一个对象向上转型的关系,从程序的运算结果中可以发现,此时虽然使用父类对象调用fun1()方法,但是实际上调用的方法是被子类覆写过的方法,也就是说,如果对象发生了向上转型关系后,所调用的方法一定是被子类覆写过的方法。但是在此时一定要注意,此时的对象a是无法调用B类中的fun3()方法的,因为此方法只在子类中定义而没有在父类中定义,如果要想调用子类中的自己定义的方法,则肯定要使用子类实例,所以此时可以将对象进行向下转型。【对象向下转型】class Apublic void fun1()System.out.println(A-public void fun1();public void fun2()this.fun1();class B extends A/覆写A中的方法public void fun1()System.out.println(B-public void fun()1);/子类中自己定义的方法public void fun3()System.out.println(B-oublic void fun3();public class PolDemo01public static void main(String args)A a=new B();/发生了向上转型关系,子类-父类B b=(B)a;/此时发生了向下转型关系b.fun1();/调用方法被覆写的方法b.fun2();/调用父类的方法b.fun3();/调用子类定义的方法运行结果:B-public void fun()1B-public void fun()1B-oublic void fun3()从以上程序中可以发现,如果要想调用子类自己的方法,则一定只能用子类的实例化对象,另外,在子类对象里调用从父类中继承过来的fun2()方法,fun2()方法要调用fun1()方法,由于此时fun1()方法已经被子类所覆写,所以此时调用的方法是被子类覆写过的方法。对象向下转型的要求:在对象向下转型前,必须首先发生对象向上转型,否则将出现对象转化异常。了解了对象的多态性后,那么这个概念到底有什么用途哪?下面要求设计一个方法,要求此方法可以接收A类的任意子类对象,并调用方法,此时,如果不用对象的多态性,则肯定会使用以下形式的代码:【不使用对象多态性实现功能】class Apublic void fun1()System.out.println(A-public void fun1();public void fun2()this.fun1();class B extends A/覆写A中的方法public void fun1()System.out.println(B-public void fun1();/子类中自己定义的方法public void fun3()System.out.println(B-poublic void fun3();class C extends Apublic void fun1()System.out.println(C-public void fun1();public void fun5()System.out.println(C-public void fun3();public class PolDemo04public static void main(String args)fun(new B();/传递B类实例fun(new C();/传递C类实例public static void fun(B b)/接收B类实例b.fun1(); public static void fun(C c)/接收C类实例c.fun1();运行结果:B-public void fun1()C-public void fun1()以上程序虽然实现了基本的要求,但是应该可以发现:如果按照以上的方式完成程序,则当产生一个A类的子类对象时,fun()方法就要被重载一次,则每一次扩充子类都必须修改类本身,这样肯定不方便,那么如果使用对象多态性完成可以很好地解决。【使用对象的多态性】class Apublic void fun1()System.out.println(A-public void fun1();public void fun2()this.fun1();class B extends A/覆写A中的方法public void fun1()System.out.println(B-public void fun1();/子类中自己定义的方法public void fun3()System.out.println(B-poublic void fun3();class C extends Apublic void fun1()System.out.println(C-public void fun1();public void fun5()System.out.println(C-public void fun3();public class PolDemo04public static void main(String args)fun(new B();/传递B类实例,产生向上转型fun(new C();/传递C类实例,产生向上转型public static void fun(A a)/接收父类对象a.fun1();运行结果:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论