Java浅拷贝子类实例的父类(super class)实例

标签 java inheritance reflection constructor copy-constructor

我想将父类(super class)的实例传递给子类的构造函数。我的第一个想法是在子类中交换父类(super class)的实例,类似于 JavaScript 原型(prototype),但有人告诉我 here Java 不支持交换 super 实例的引用,因为本身不存在 super 实例。

为了避免这个问题,我想使用一个接受父类(super class)实例的复制构造函数。然后,我将不得不手动重新链接所有引用,从长远来看,当其他人扩展父类(super class)的代码并忘记子类中的复制构造函数时,这会引发错误。

问题:是否有一些简洁而好的方法可以自动复制所有引用,也许可以使用一些反射机制来防止将来出现错误?

最佳答案

您不应将所有引用从父类(super class)实例复制到子类实例。顺便说一句,如果所有这些引用在父类(super class)中声明为私有(private)字段(通常应该如此),那么它们甚至不应该从子类访问。

您可能需要的是委派,而不是继承:

// Foo is the superclass
private class FooAdapter {
    private Foo foo;

    public FooAdapter(Foo foo) {
        this.foo = foo;
    }

    public void doThis() {
        return foo.doThis();
    }
}

FooAdapter 可以扩展 Foo 或者(更好)他们应该实现一个通用接口(interface),但这不一定需要。

如果这不能解决您的问题,请告诉我们您想做什么,而不是告诉我们您想如何做。您想解决什么问题?

关于Java浅拷贝子类实例的父类(super class)实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8670870/

相关文章:

java - 如何获得按钮以在 fragment 中运行函数?

c++ - 继承中的多个覆盖方法每个都有多种可能的实现

c# - 如何从泛型定义和泛型参数中获取泛型类型?

java - 如何检查类是否已使用 Kotlin 或 Java 中的反射覆盖接口(interface)中的默认方法?

java - 无法在 xml 中使用 "degree"符号

java - 如何将列表/字符串生成器渲染到模板

java - java中是否可以覆盖文件使其无法恢复?

javascript - Javascript 如何将值从 "super class"传递到 "child class"

c++ - dynamic_cast的继承与使用

java - 使用反射创建任何类型的对象