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