我有以下课程:
public abstract class A implements C {
...
}
public abstract class B extends A {
method();
}
但是,当我尝试执行以下操作时
A a = null;
A a = new A();
((B) a).method();
我收到ClassCastException,有没有人有解决方案?
答案 0 :(得分:3)
B扩展A,但A不扩展B.
A有B的所有东西,但A不能做B中声明的东西
答案 1 :(得分:0)
B
的实例是A
的实例,但A
的实例不一定是B
。类似于说“所有圆形都是形状,但并非所有形状都是圆形”。
你无法做你想做的事。这就是你得到例外的原因。
答案 2 :(得分:0)
我认为你想要的是一个构造函数和一个对象并从中创建一个更大的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();