java ;将基类转换为派生类

标签 java casting class

为什么我不能将基类实例强制转换为派生类?

例如,如果我有一个扩展类 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/

相关文章:

ios - 无法从字符串创建 CIFilter 类

c++ - 基于文本的冒险游戏

java - 在随机时间段使用 Java Google App Engine Standard 的内存缓存中出现服务错误

java - 来自 mongoDB 的更改事件中的 updateDescription.updatedFields 为空

PHP字符串 float

c - 如何将结构类型转换为分配的 char 内存空间

c++ - 基类和派生类私有(private)成员变量使用

java - 使用多线程在Java服务器中同时监听两个端口

java - java 解析 json

matlab - Matlab中同时涉及单双矩阵时的内存和速度问题