Subclass实例到Superclass

时间:2014-11-25 19:10:03

标签: java inheritance

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

例如:

class Super {
    private int id;
    private String 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 {
    private String lastName;

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}


public class Test {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Super sup = new Super();
        sup.setId(1);
        sup.setName("Super");

        Sub sub = new Sub();

        System.out.println(sub.getName());
    }

}

如何使用之前创建的“超级”属性创建“Sub”对象?

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

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

3 个答案:

答案 0 :(得分:2)

您可以将复制构造函数添加到Super Class

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;
    }
}

然后在Sub class

中使用此构造函数
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);

答案 1 :(得分:1)

我会在Sub:

中创建一个静态方法
Sub.fromSuper(Super s, String last)

答案 2 :(得分:1)

我会使用apache commons

BeanUtils.copyProperties(toBean, fromBean);

除非确实需要每个对象,否则我不会向类本身添加方法。 BeanUtils看似合适,因为它看起来像只在特定情况下需要的东西。

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