爪哇;将基类转换为派生类
为什么我无法将基类实例强制转换为派生类?
例如,如果我有一个扩展了类 C 的 B 类,为什么我不能这样做?
B b=(B)(new C());
还是这个?
C c=new C();
B b=(B)c;
好吧,让我更具体地说明我想要做什么。以下是我所拥有的:
public class Base(){
protected BaseNode n;
public void foo(BaseNode x){
n.foo(x);
}
}
public class BaseNode(){
public void foo(BaseNode x){...}
}
现在我想创建一组扩展Base和Basenode的新类,如下所示:
public class Derived extends Base(){
public void bar(DerivedNode x){
n.bar(x);//problem is here - n doesn't have bar
}
}
public class DerivedNode extends BaseNode(){
public void bar(BaseNode){
...
}
}
因此,从本质上讲,我想通过扩展Base和BaseNode来为它们添加新功能,并为它们添加一个功能。此外,Base和BaseNode应该能够单独使用。
如果可能的话,我真的很想在没有泛型的情况下做到这一点。
好吧,所以我最终弄清楚了,部分归功于Maruice Perry的回答。
在我的构造函数中,被实例化为 .我所要做的就是在构造函数中作为我的派生类重新实例化,并且它可以完美地工作。Base
n
BaseNode
n
DerivedNode