继承的类转换异常 类
Classcast exception for inherited classes
我有这样的 class 结构:
Interface A extends X
Class A_Impl implements A
Interface B extends A
Class B_Impl extends A_Impl implements B
我的 Web 服务客户端 returns A 的对象,我需要 B 的一些参数。所以我这样做:
A myA = (A) webservice.getA();
B myB = (B) myA;
但这总是抛出 ClassCast 异常:
java.lang.ClassCastException: A_Impl cannot be cast to B
我是不是做错了什么?我怎样才能从 B class.
得到一些参数
当您拥有 B
的超类型 A
或除 B
之外的任何子类型的实例时,您无法获得 B
的任何属性。例如,如果您想获取属于 B
的字段 x
的值,但您的对象只是一个 A
,该字段甚至不存在于对象中.那么它的价值是多少?这就是你不能朝这个方向施法的原因。如果你不想像 B
的实例那样访问对象,你必须将 webservice.getA()
更改为实际上 returns 一个 B
(或 B_Impl
)
如果您引用了一个未实现 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();}
}
我有这样的 class 结构:
Interface A extends X
Class A_Impl implements A
Interface B extends A
Class B_Impl extends A_Impl implements B
我的 Web 服务客户端 returns A 的对象,我需要 B 的一些参数。所以我这样做:
A myA = (A) webservice.getA();
B myB = (B) myA;
但这总是抛出 ClassCast 异常:
java.lang.ClassCastException: A_Impl cannot be cast to B
我是不是做错了什么?我怎样才能从 B class.
得到一些参数当您拥有 B
的超类型 A
或除 B
之外的任何子类型的实例时,您无法获得 B
的任何属性。例如,如果您想获取属于 B
的字段 x
的值,但您的对象只是一个 A
,该字段甚至不存在于对象中.那么它的价值是多少?这就是你不能朝这个方向施法的原因。如果你不想像 B
的实例那样访问对象,你必须将 webservice.getA()
更改为实际上 returns 一个 B
(或 B_Impl
)
如果您引用了一个未实现 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();}
}