如何基于超类对象创建子类对象?
例如:
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());
答案 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是一种方法