Java 子类实例到超类

Java 子类实例到超类,java,inheritance,Java,Inheritance,如何基于超类对象创建子类对象 例如: 如何创建具有先前创建的“超级”属性的“子”对象 或者我应该手动传递属性,例如: sub.setName(sup.getName()); sub.setId(sup.getId()); 我将在Sub中创建一个静态方法: Sub.fromSuper(Super s, String last) 我将在Sub中创建一个静态方法: Sub.fromSuper(Super s, String last) 您可以将副本构造函数添加到Super类中 public

如何基于超类对象创建子类对象

例如:



如何创建具有先前创建的“超级”属性的“子”对象

或者我应该手动传递属性,例如:

sub.setName(sup.getName());
sub.setId(sup.getId());

我将在Sub中创建一个静态方法:

Sub.fromSuper(Super s, String last)

我将在Sub中创建一个静态方法:

Sub.fromSuper(Super s, String last)

您可以将副本构造函数添加到
Super
类中

public class Super {
    private int id;
    private String name;

    public Super(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public Super(Super other) {
        this.id = other.id;
        this.name = other.name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
然后在子类中使用此构造函数

class Sub extends Super {
    public Sub(Super other) {
        super(other);
    }

    private String lastName;

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}
你可以打电话

Sub sub = new Sub(sup);

您可以将副本构造函数添加到
Super
类中

public class Super {
    private int id;
    private String name;

    public Super(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public Super(Super other) {
        this.id = other.id;
        this.name = other.name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
然后在子类中使用此构造函数

class Sub extends Super {
    public Sub(Super other) {
        super(other);
    }

    private String lastName;

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}
你可以打电话

Sub sub = new Sub(sup);

我会使用apachecommons

BeanUtils.copyProperties(toBean, fromBean);
除非每个对象都需要方法,否则我不会向类本身添加方法。小海狸看起来很合适,因为它看起来像是只有在特定情况下才需要的东西


如果您真的需要每个对象上的行为,那么实现a是一种方法

我将使用apache commons

BeanUtils.copyProperties(toBean, fromBean);
除非每个对象都需要方法,否则我不会向类本身添加方法。小海狸看起来很合适,因为它看起来像是只有在特定情况下才需要的东西


如果您确实需要每个对象上的行为,那么实现a是一种方法

您的用例是什么?你为什么需要它?@nrainer我有
FirmwareVersion
SoftwareVersion
扩展
Version
的类。用户可以将一个或多个版本添加到列表中。因此,我调用
newversion()
。当用户单击“保存”按钮时,他必须选择是固件版本还是软件版本。然后我可以调用
newfirmwareversion()
newsoftwareversion()
Ok。然后我假设不可能避免创建
Version
的实例,是吗?我们谈论的是web应用程序吗?是的,在那个时候我不知道它将是什么类型的版本。所以,我必须创建一个通用版本。只有在以后,当用户选择时,我才能创建特定的版本。这是一个桌面应用程序。第一次我创建了一个抽象版本,但显然,它必须是一个具体的类。是否有接口方法的解决方案?为什么需要创建通用版本?你不能等到用户选择版本吗?你的用例是什么?你为什么需要它?@nrainer我有
FirmwareVersion
SoftwareVersion
扩展
Version
的类。用户可以将一个或多个版本添加到列表中。因此,我调用
newversion()
。当用户单击“保存”按钮时,他必须选择是固件版本还是软件版本。然后我可以调用
newfirmwareversion()
newsoftwareversion()
Ok。然后我假设不可能避免创建
Version
的实例,是吗?我们谈论的是web应用程序吗?是的,在那个时候我不知道它将是什么类型的版本。所以,我必须创建一个通用版本。只有在以后,当用户选择时,我才能创建特定的版本。这是一个桌面应用程序。第一次我创建了一个抽象版本,但显然,它必须是一个具体的类。是否有接口方法的解决方案?为什么需要创建通用版本?你不能等到用户选择版本吗?