/*多态的弊端:不能使用子类的特有功能。*/classFu{publicvoidshow(){System.out.println("showfu");}}classZiextendsFu{publicvoidshow(){System.out.println("showzi");}publicvoidmethod(){System.out.println("methodzi");}}classDuoTaiDemo3{publicstaticvoidmain(String[]args){//测试Fuf=newZi();f.show();f.method();//编译看左边,但是左边的Fu没有method方法,会报错。不能使用子类的method方法}}多态弊端的解决;
/*多态的弊端:不能使用子类的特有功能。我就想使用子类的特有功能行不行行。怎么用呢A:创建子类对象调用方法即可。(可以,但是很多时候不合理。而且,太占内存了)B:把父类的引用强制转换为子类的引用。(向下转型)对象间的转型问题:向上转型:Fuf=newZi();向下转型:Ziz=(Zi)f;//要求该f必须是能够转换为Zi的。*/classFu{publicvoidshow(){System.out.println("showfu");}}classZiextendsFu{publicvoidshow(){System.out.println("showzi");}publicvoidmethod(){System.out.println("methodzi");}}classDuoTaiDemo4{publicstaticvoidmain(String[]args){//测试Fuf=newZi();f.show();//f.method();//创建子类对象//Ziz=newZi();//z.show();//z.method();//你能够把子的对象赋值给父亲,那么我能不能把父的引用赋值给子的引用呢//如果可以,但是如下Ziz=(Zi)f;z.show();z.method();}}多态问题的理解:
多态的问题理解:class孔子爹{publicintage=40;publicvoidteach(){System.out.println("讲解JavaSE");}}class孔子extends孔子爹{publicintage=20;publicvoidteach(){System.out.println("讲解论语");}publicvoidplayGame(){System.out.println("英雄联盟");}}//Java特别火,很多人来请孔子爹去讲课,这一天孔子爹被请走了//但是还有人来请,就剩孔子在家,价格还挺高。孔子一想,我是不是可以考虑去呢//然后就穿上爹的衣服,带上爹的眼睛,粘上爹的胡子。就开始装爹//向上转型孔子爹k爹=new孔子();//到人家那里去了System.out.println(k爹.age);//40k爹.teach();//讲解论语//k爹.playGame();//这是儿子才能做的//讲完了,下班回家了//脱下爹的装备,换上自己的装备//向下转型孔子k=(孔子)k爹;System.out.println(k.age);//20k.teach();//讲解论语k.playGame();//英雄联盟多态继承中的内存讲解:
多态中的对象变化内存图解:
多态中类转换异常:
/*看程序写结果:先判断有没有问题,如果没有,写出结果多态的成员访问特点:方法:编译看左边,运行看右边。继承的时候:子类中有和父类中一样的方法,叫重写。子类中没有父亲中出现过的方法,方法就被继承过来了。*/classA{publicvoidshow(){show2();}publicvoidshow2(){System.out.println("我");}}classBextendsA{/*publicvoidshow(){show2();}*/publicvoidshow2(){System.out.println("爱");}}classCextendsB{publicvoidshow(){super.show();}publicvoidshow2(){System.out.println("你");}}publicclassDuoTaiTest4{publicstaticvoidmain(String[]args){Aa=newB();a.show();Bb=newC();b.show();}}