java转换ClassCastException

时间:2012-11-28 14:21:29

标签: java casting

我有以下课程:

public abstract class A implements C {
    ...
}

public abstract class B extends A {
    method();
}

但是,当我尝试执行以下操作时

A a = null;
A a = new A();
((B) a).method();

我收到ClassCastException,有没有人有解决方案?

3 个答案:

答案 0 :(得分:3)

B扩展A,但A不扩展B.

A有B的所有东西,但A不能做B中声明的东西

答案 1 :(得分:0)

B的实例是A的实例,但A的实例不一定是B。类似于说“所有圆形都是形状,但并非所有形状都是圆形”。

你无法做你想做的事。这就是你得到例外的原因。

答案 2 :(得分:0)

我认为你想要的是一个构造函数和一个对象并从中创建一个更大的B对象,它具有包含的方法(A没有)。但这并没有多大意义。不能为我的生活考虑为什么你想在实践中这样做,并且不会只是建立B对象开始。

public abstract class A implements C {
    ...
}

public abstract class B extends A {

    public B(A child){
        //Construct a B out of A here
    }

    public void method();
}

然后

 A a = null;
 A a = new A();
 new B(a).method();