我有以下课程:
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
不一定是B
。类似于说“所有的圆都是形状,但不是所有的形状都是圆”。
你不能做你想做的事。这就是你得到例外的原因。
我认为您在这里想要的是一个构造函数来获取 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();