java - 继承类的 ClasscastException

标签 java inheritance interface classcastexception

我有一个这样的类结构:

Interface A extends X
Class A_Impl implements A

Interface B extends A
Class B_Impl extends A_Impl implements B

我的网络服务客户端返回 A 的对象,我需要来自 B 的一些参数。所以我这样做:

A myA = (A) webservice.getA();
B myB = (B) myA;

但这总是抛出 ClassCast 异常:

java.lang.ClassCastException: A_Impl cannot be cast to B

我在这里做错了什么吗?如何从 B 类获取一些参数。

最佳答案

如果您有对未实现 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();}
}

关于java - 继承类的 ClasscastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28520916/

相关文章:

java - 带类型参数的接口(interface)有什么用?

java - JSP/EL 的省略号(缩写文本)

Java - 这两个对象如何相互相等?

CSS:将边框颜色设置为 parent 的背景颜色

asp.net-mvc - ASP.Net MVC 强类型部分 View 和继承属性

c# - 用于部分排序的 IComparable 类型接口(interface)

javascript - Android webview 使用 GSAP : Attempt to remove non-JNI local reference, 转储线程

java - 为什么是 Class.forName ('database driver' )?

Java泛型方法继承和覆盖规则

java - 实用程序方法需要接口(interface),但不接受实现所述接口(interface)的类