欢迎来到天天文库
浏览记录
ID:59211175
大小:1.37 MB
页数:74页
时间:2020-09-26
《第8讲(2.5) 类的多态 ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第八讲类的多态第8讲类的多态性2021/9/101多态性:(1)方法的多态性(重载):同一个方法名称根据输入参数的不同,完成的功能也不同。(2)对象的多态性:是继承上的扩展,是子类对象与父类对象之间的转换。1、对象的多态性例1没有转型继承例子方法调用classA{publicvoidfun1(){System.out.println("1、A-->publicvoidfun1()");}publicvoidfun2(){this.fun1();}};classBextendsA{publicvoidfun1()//覆写了fun1()方法{System.out.println
2、("2、B-->publicvoidfun1()");}publicvoidfun3(){System.out.println("3、B-->publicvoidfun3()");}};publicclassInherit1{publicstaticvoidmain(Stringargs[]){Bb=newB();b.fun2();b.fun3();}};上例程序运行结果2、B-->publicvoidfun1()3、B-->publicvoidfun3()例2向上转型例子classA{publicvoidfun1(){System.out.println("1、A-->p
3、ublicvoidfun1()");}publicvoidfun2(){this.fun1();}};classBextendsA{//覆写了fun1()方法publicvoidfun1(){System.out.println("2、B-->publicvoidfun1()");}//增加了一个fun3()方法publicvoidfun3(){System.out.println("3、B-->publicvoidfun3()");}};publicclassSonChangeFather{publicstaticvoidmain(Stringargs[]){Aa=nul
4、l;a=newB();//子类对象为父类实例化a.fun2();}};如果一个方法被子类覆写了,则子类与父类之间发生转换时,自动去调用已经被覆写过的方法(子类中的方法),如果没有覆写,仍然去找本类(父类)中的方法。思考:已经转型的父类对象a,能否调用子类对象的fun3方法呢?回答:不能。转型后只能看到本类中已有的方法上例程序运行结果2、B-->publicvoidfun1()例3向下转型:上面的例题主方法做如下修改publicclassFatherCastSon{publicstaticvoidmain(Stringargs[]){Aa=null;a=newB();//子类
5、对象为父类实例化//fun1方法被子类覆写了Bb=null;b=(B)a;//向下转型b.fun2();b.fun3();//向下转型后的对象可以调用自己独//有的方法}};修改后程序运行结果2、B-->publicvoidfun1()3、B-->publicvoidfun3()思考:如果主方法改为如下调用情况如何?publicclassFatherDeirectSon{publicstaticvoidmain(Stringargs[]){Aa=newA();a.fun2();Bb=(B)a;b.fun2();}};分析:该主方法是错误的,原因是:父类定义中看不出自己的子类
6、B,所以父类对象直接向下转型时会报出:classCastException类型转换错误,也即:向下转型只能针对指向子类对象的基类对象引用进行修改后程序编译出现以下错误1、A-->publicvoidfun1()Exceptioninthread"main"java.lang.ClassCastException:jiuErWu.AcannotbecasttojiuErWu.BatjiuErWu.testOverWrite.main(testOverWrite.java:39)如果对象是类的实例则返回true,否则返回false如果一个对象被子类实例化了,则该对象既是本类的对
7、象,也是子类的对象注意:instanceof是关键字不是方法例4:instanceof应用举例classA{};classBextendsA{};publicclassInstanceOfFun{publicstaticvoidmain(Stringargs[]){Aa=newB();System.out.println(ainstanceofA);System.out.println(ainstanceofB);}};上例程序运行结果转型时的注意事项(1)向上转型是安全的,默认系统会自动转型。(2)但是向下转型往
此文档下载收益归作者所有