java向下转型,有啥作用。求解
关注:197 答案:2 mip版
解决时间 2021-01-25 08:10
提问者删除记忆里的你
2021-01-25 03:12
java向下转型,有啥作用。求解
最佳答案
二级知识专家空虚的心
2021-01-25 03:29
向下转型
将超类的引用强制转换为子类类型就叫做向下转型。
注意:将超类的引用赋给为子类类型的变量(没有进行显示地强制转换)是一个编译
错误。
例子:
还是上面的for循环代码
for(int i=0;i
{
if(x[i] instanceof MoreUseful2) // 判断instanceof左边的对象是否是右边的类的实例。
{
MoreUseful2 moreuseful2 = (MoreUseful2)x[i]; // 向下转型
moreuseful2.u();
}
x[i].g();
}
分析:x[i]可以代表具体的Useful对象类型,当它是MoreUseful2或ExtendsMoreUseful2
对象类型时,就可以调用该对象的额外方法u(),v(),w(),也就是当对象x[i]和Moreusful对
象存在is-a关系时,才可以进行向下转型,如果要转换的对象类型与指定的对象类型不
存在is-a关系时,会产生一个ClassCastException异常。
总之:
向下转型时,对象只能强制转换为其本身类型或者其超类类型。比如,
当x[i]ExtendsMoreUseful2对象时,可以把他转换为其本身ExtendsMoreUseful2对象类
型,也可以把它转换为其基类MoreUseful2类型。但是在编译时候还不知道这个x[i]是代
表那个具体对象类型只知道这个x[i]是基类类型引用,所以要用这样的形式" (想要要得
到的类型)x[i] " 进行转换。x[i]在这里是就我这个例子来说明的,你也可以使用其它的
英文代替,其意义是一切符合规定的需要被转换的对象。
下面还有个关于向上转型和向下转型的例子,
abstract class ClassAbstract1{}
class ClassDerived1 extends ClassAbstract1
{
public void play1()
{
System.out.println("play1() is in the ClassDerived1");
}
}
abstract class ClassAbstract2{public abstract void play2();}
class ClassDerived2 extends ClassAbstract2
{
public void play2()
{
System.out.println("play2() is in the ClassDerived2");
}
}
public class E14_UnCast {
public static void playDemo1(ClassAbstract1 ObjectParameter)
{
((ClassDerived1)ObjectParameter).play1();//向下转型,可以调用导出类中的扩展方法
}
public static void playDemo2(ClassAbstract2 ObjectParameter)
{
ObjectParameter.play2();//向上转型,可以调用导出类中的覆盖方法
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ClassAbstract1 classabstract = new ClassDerived1();
playDemo1(classabstract);
ClassAbstract2 classabstract2 = new ClassDerived2();
playDemo2(classabstract2);
}
}
运行结果:
play1() is in the ClassDerived1
play2() is in the ClassDerived2
全部回答
1楼守給你的承諾
2021-01-25 03:35
向下转型获得子类对象。可以调用子类中具体的功能。
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上信息!
推荐资讯
大家都在看