为什么我无法将基类实例转换为派生类?Java;将基类转换为派生类
例如,如果我有一个扩展类C的类B,为什么我不能这样做?
B b=(B)(new C());
or this?
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){...}
}
现在我想创建一个新的组类延伸基地和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){
...
}
}
所以基本上我想新的功能添加到基地和BaseNode通过扩展它们并添加一个函数给它们。此外,Base和BaseNode应该可以独立使用。
如果可能的话,我真的很喜欢不使用泛型。
好吧,所以我最终找出了答案,部分得益于Maruice Perry的回答。
在我的构造函数Base
中,n
被实例化为BaseNode
。我所要做的只是在构造函数的派生类中将n
重新实例化为DerivedNode
,它完美地工作。
首先,你需要使BaseNode n;受到保护,以便派生可以看到它。 – Joel 2010-04-03 19:30:18
Woops(改变它)。 – Cam 2010-04-03 19:31:23
我的意思是没有任何方式没有泛型这样做?就像我说过的,我希望基类可以按原样使用 - 添加泛型会使它们更加麻烦,并且会删除Base应该由Base封装的BaseNode类的封装。 – Cam 2010-04-03 19:43:23