java casting ClassCastException

java casting ClassCastException,java,casting,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,有人有解决方案吗?B扩展了a,但a没有扩展B A拥有B拥有的一切,但A不能做B中声明的事情B的实例是A的实例,

我有以下课程:

public abstract class A implements C {
    ...
}

public abstract class B extends A {
    method();
}
但是当我试着做下面的事情时

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

我收到一个ClassCastException,有人有解决方案吗?

B扩展了a,但a没有扩展B

A拥有B拥有的一切,但A不能做B中声明的事情B的实例是A的实例,但A的实例不一定是A B。类似于说所有的圆都是形状,但不是所有的形状都是圆


你不能做你想做的事。这就是为什么会出现异常。

我认为这里需要的是一个构造函数和一个对象,并从中生成一个更大的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对象,你不能仅仅把它转换成一个B,而希望它是B对象。你为什么要这样做?这背后的动力是什么?我无法理解你是如何获得CCE的。你在实例化一个A的实例时应该失败——它是抽象的,而新的A要么是打字错误,要么就是你在到处发问。
 A a = null;
 A a = new A();
 new B(a).method();