继承的类转换异常 类

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();}
}