intanseof判别成功之后为什么还要强制类型转换?
Posted hmy-666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了intanseof判别成功之后为什么还要强制类型转换?相关的知识,希望对你有一定的参考价值。
Clas A{ } 父类
子类B :Class B extends A{
public void test(Object o){
if(o instanceof A ){
A a = (A)o// 刚开始的时候 这里我一直闹不明白这里为什么要进行强制转换 因为b.test(c)这里明明传入C是A的子类 , 根据多态 子类的引用可以直接付给父类的引用 为什么还要进行强制类型转换呢?
后来才明白 if(o instanceof A ) 执行这句话的时候 在运行阶段 这里的确是判断o是不是A类的一个实例或者子类,但是在编译阶段 ,public void test(Object o) 这里的o编译器就是认为是Object的引用
o 是所有类的父类,
A是Object的子类,那么在编译阶段 : 父类的引用不能直接付给子类 ,所以要进行强制类型转换
}
}
子类C:Class C extends A{}
public void test(Object o){
if(o instanceof A ){
A a = (A)o// 刚开始的时候 这里我一直闹不明白这里为什么要进行强制转换 因为b.test(c)这里明明传入C是A的子类 , 根据多态 子类的引用可以直接付给父类的引用 为什么还要进行强制类型转换呢?
后来才明白 if(o instanceof A ) 执行这句话的时候 在运行阶段 这里的确是判断o是不是A类的一个实例或者子类,但是在编译阶段 ,public void test(Object o) 这里的o编译器就是认为是Object的引用
o 是所有类的父类,
A是Object的子类,那么在编译阶段 : 父类的引用不能直接付给子类 ,所以要进行强制类型转换
}
}
子类C:Class C extends A{}
B b = new B();
C c =new C();
b.test(c)
————————————————
版权声明:本文为CSDN博主「邯郸小壮壮」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_36695293/article/details/77388862
C c =new C();
b.test(c)
————————————————
版权声明:本文为CSDN博主「邯郸小壮壮」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_36695293/article/details/77388862
以上是关于intanseof判别成功之后为什么还要强制类型转换?的主要内容,如果未能解决你的问题,请参考以下文章
(转)统计学习-2 感知机知识准备(模型类型超平面与梯度下降法)