嗨这个非常基本的问题。但我需要知道处理这个问题的最佳方法是什么。
家长班。
public class Parent {
private String familyName;
public Parent() {
}
public Parent(String familyName) {
this.familyName = familyName;
}
public String getFamilyName() {
return familyName;
}
public void setFamilyName(String familyName) {
this.familyName = familyName;
}
儿童班。
public class Child extends Parent {
String name;
public Child(Parent parent) {
super(parent.getFamilyName());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Child{" +
"name='" + name + '\'' +
"familyname='" + getFamilyName() + '\'' +
'}';
}
}
或者是否有任何支持库通过克隆父实例来创建子实例。
这是我们通常可以做的事情。但是当我们的属性很少时,这是可以的。 但如果我们有一个100多个属性的类,我们就无法做到这一点。它有些丑陋。 那么有没有办法创建子实例传递父实例,而不是逐个设置属性值。
答案 0 :(得分:0)
在我看来有点令人困惑,你必须传递一个Parent类作为Child的参数,并且你可以拥有一个类,在构造函数中需要这么多的输入参数。此外,您必须尝试传递字段值,以隐藏类的inhritance,而不是Parent类。像:
public class Child extends Parent {
String name;
public Child(String name, String familyName) {
super(familyName);
this.name = name;
}
...
}
或者您需要让孩子将父母作为字段,例如:
public class Child {
String name;
Parent parent;
public Child(String name, Parent parent) {
this.parent = parent;
this.name = name;
}
...
}
您可以为Parent和Child提供一些通用界面,并将其用于您的目的。或者甚至更多,您可以将其扩展为Parent类,但将其作为实例并覆盖您需要的所有方法,例如:
public class Child extends Parent {
String name;
Parent parent;
public Child(String name, Parent parent) {
super();
this.parent = parent;
this.name = name;
}
@Override
public String getFamilyName() {
return parent.familyName;
}
@Override
public void setFamilyName(String familyName) {
parent.familyName = familyName;
}
...
}
但是,IMO,你需要有一个非常有价值的理由来使用这样的解决方案,因为它并不像通常那样简单。
另一个解决方案是创建一个额外的Parent构造函数,如:
public class Parent {
private String familyName;
public Parent() {
}
public Parent(Parent clone) {
this.familyName = clone.familyName;
}
...
}
并将其命名为:
public class Child extends Parent {
String name;
public Child(String name, Parent parent) {
super(parent);
this.name = name;
}
...
}