-3

我有以下课程:

public abstract class A implements C {
    ...
}

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

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

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

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

4

3 回答 3

3

B 扩展 A,但 A 不扩展 B。

A 拥有 B 拥有的一切,但 A 不能做 B 中声明的东西

于 2012-11-28T14:24:33.730 回答
0

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

你不能做你想做的事。这就是你得到例外的原因。

于 2012-11-28T14:24:45.580 回答
0

我认为您在这里想要的是一个构造函数来获取 A 对象并从中制作一个更大的 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();
于 2012-11-28T14:27:06.357 回答