为什么我不能将基类实例强制转换为派生类?
例如,如果我有一个扩展类 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
,它可以完美运行。
最佳答案
因为如果 B 扩展了 C,则意味着 B 是 C 而不是 C 是 B。
重新考虑你想要做什么。
关于 java ;将基类转换为派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2572348/