我有这样的类结构:
Interface A extends X
Class A_Impl implements A
Interface B extends A
Class B_Impl extends A_Impl implements B
我的webservice客户端返回A的对象,我需要来自B的一些参数。所以我这样做:
A myA = (A) webservice.getA();
B myB = (B) myA;
但是这总是抛出ClassCast异常:
java.lang.ClassCastException: A_Impl cannot be cast to B
我在这里做错了吗?我如何从B班获得一些参数。
答案 0 :(得分:1)
当您拥有B
的超类型B
的实例或除A
以外的任何子类型时,您无法获得B
的任何属性。例如,如果您想获得属于x
成员的字段B
的值,但您的对象只是A
,则该字段甚至不会出现在对象中。那么它的价值是什么?这就是你不能朝这个方向发展的原因。如果您不想像B
的实例一样访问该对象,则必须将webservice.getA()
更改为实际返回B
(或B_Impl
)<的内容/ p>
答案 1 :(得分:1)
如果您对未实现B
的对象有引用,则无法将其强制转换为B
。完全停止。
想象一下,如果 可能。那打印什么呢?
interface A {
int getNumberOfLives();
}
interface B extends A {
boolean isOrange();
}
class A_Impl implements A {
int getNumberOfLives() {return 9;}
}
public class Main {
public static void main(String[] args) {
A a = getA();
B b = (B)a;
System.out.println(b.isOrange() ? "Is orange" : "Is not orange");
}
static A getA() {return new A_Impl();}
}