推荐回答
java转型问题其实并不复杂,只要记住一句话:父类引用指向子类对象。什么叫父类引用指向子类对象,且听我慢慢道来.从2个名词开始说起:向上转型upcasting、向下转型downcasting.举个例子:有2个类,Father是父类,Son类继承自Father。Fatherf1=newSon;//这就叫upcasting;子类s1引用不能指向父类对象。总结:1。父类引用指向子类对象,而子类引用不能指向父类对象。2。把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转换。如:Fatherf1=newSon;3。把指向子类对象的父类引用赋给子类引用叫向下转型downcasting,要强制转换。如:f1就是一个指向子类对象的父类引用。把f1赋给子类引用s1即Sons1=Sonf1;其中f1前面的Son必须加上,进行强制转换。一、向上转型。通俗地讲即是将子类对象转为父类对象。此处父类对象可以是接口。1,向上转型中的方法调用。看下面代码:args{Girlg1=newMMGirl;//向上转型g1.smile;MMGirlmmg=MMGirlg1;//向下转型,编译和运行皆不会出错mmg.smile;mmg.c;Girlg2=newGirl;//MMGirlmmg1=MMGirlg2;//不安全的向下转型,编译无错但会运行会出错//mmg1.smile;//mmg1.c;/*output:*CGirlsmilesoundssweet...*CGirlsmilesoundssweet...*CGirlc...*Exceptioninthread"main"java.lang.ClassCastException:com.wensefu.other1.Girl*atcom.wensefu.other1.Main.mainGirl.java:36*/ifg2instanceofMMGirl{MMGirlmmg1=MMGirlg2;mmg1.smile;mmg1.c;}}}Girlg1=newMMGirl;//向上转型g1.smile;MMGirlmmg=MMGirlg1;//向下转型,编译和运行皆不会出错这里的向下转型是安全的。因为g1指向的是子类对象。而Girlg2=newGirl;MMGirlmmg1=MMGirlg2;//不安全的向下转型,编译无错但会运行会出错运行出错:Exceptioninthread"main"java.lang.ClassCastException:com.wensefu.other1.Girlatcom.wensefu.other1.Main.mainGirl.java:36如代码所示,可以通过instanceof来防止出现异常。
龙小美2019-12-22 00:21:35
提示您:回答为网友贡献,仅供参考。