2012-11-28 136 views
-3

我有以下类别:java的铸造ClassCastException异常

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

的解决方案是不这样做,因为它是没有任何意义。一个变量指的是一个A对象,你不能把它投给B,并希望它是这样的会使它成为B对象。你为什么想要尝试这个?这背后的动力是什么? –

+2

你如何获得CCE超越了我。你应该在实例化一个A的实例时失败 - 它是抽象的,新的A()是一个错字,或者你只是抛出问题。 –

回答

3

B扩展A,而A犯规延长B.

一切已B有,但是A不能做B中

0

声明的东西B一个实例是A的实例,但一个实例A不一定是B。类似于“所有圈子都是形状,但并非所有形状都是圈子”。

你不能做你想做的事情。这就是为什么你会得到例外。

0

我认为你在这里想要的是一个构造函数来获取和一个对象,并使其中包含的方法(A没有)有一个更大的B对象。但这并没有太大的意义。不能为我的生活考虑为什么你想在实践中这样做,并且不会仅仅建立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();