我正在一个类中重载构造函数的项目,我有点卡住了,下面是我应该对重载的构造函数做的事情:
"允许将第一个,中间名和姓氏作为带有年龄的int的字符串传递
接受Name对象引用,age作为int
我不太确定如何处理我的代码,这就是我所得到的:
public class Person {
int age;
Name aPersonHasAName;
Name newPerson = new Name();
public Person(String firstName, String middleName, String lastName, int age) {
newPerson.firstName = firstName;
newPerson.middleName = middleName;
newPerson.lastName = lastName;
}
public Person(Name aPersonHasAName, int age) {
}
public void details() {
System.out.println(aPersonHasAName + " age: " + age);
}
}
我只是输了我应该打字的东西。我相信我已经完成了第一个重载的构造函数,但我是新手。
那么我应该做些什么来使这个与重载的构造函数一起工作?
我认为使用其他两个类的代码可能有所帮助。
这是PersonTester:
public class PersonTester {
public static void main(String[] args) {
Person person1 = new Person("a1", "b1", "c1", 11);
Person person2 = new Person(new Name("a2", "b2", "c2"), 22);
Person person3 = new Person(new Name("a3", "c3"), 33);
Person person4 = new Person(new Name("a4"), 44);
Person person5 = new Person(new Name(), 55);
System.out.println(person1.details());
System.out.println(person2.details());
System.out.println(person3.details());
System.out.println(person4.details());
System.out.println(person5.details());
}
}
然后这是Name类: 公共类名{ String firstName; String middleName; String lastName;
public Name(String firstName, String middleName, String lastName) {
this.firstName = firstName;
this.middleName = middleName;
this.lastName = lastName;
}
public Name(String firstName, String lastName) {
this(firstName, "", lastName);
}
public Name(String firstName) {
this(firstName, "", "");
}
public Name() {
this("", "", "");
}
public String getLastName() {
return lastName;
}
public String getMiddleName() {
return middleName;
}
public String getFirstName() {
return firstName;
}
public String getFullName(String nameString) {
StringBuilder build = new StringBuilder();
build.append(nameString);
build.deleteCharAt(nameString.length() - 1);
build.insert(0, build.hashCode());
return build.toString();
}
}
我现在遇到的问题是PersonTester中的错误消息:PrintStream类型中的方法println(boolean)不适用于参数(void)
我只需要知道需要修复哪个类才能使其工作。
我是Java和面向对象编程的新手。
答案 0 :(得分:1)
更新您的代码:
public Person(String firstName, String middleName, String lastName, int age) {
newPerson.firstName = firstName;
newPerson.middleName =
newPerson.lastName = lastName;
this.age = age; //<---- was missing in your code
}
你的第二个构造函数可能如下所示:
public Person(Name aPersonHasAName, int age) {
this.newPerson = aPersonHasAName;
this.age = age;
}
这些结构可以根据需要实施。
请注意,您已经完成了重载,如果您有多个构造函数,不与构造函数重载相同的标题
答案 1 :(得分:1)
到目前为止一切顺利。但最终你会达到复制相当多代码的程度。
构造函数
public Person(String firstName, String middleName, String lastName, int age) {
是最全面的,它接收所有可能的数据。
使用其他构造函数,例如一个使用姓氏和年龄的构造函数,您可以使用委派构造函数:
public Person(String lastName, int age) {
this(null, null, lastName, age); /*calls the other constructor*/
}
如果您不能做出这样的假设,那么您需要手动拆分名称字符串。
答案 2 :(得分:0)
public class Person {
int age;
Name aPersonHasAName;
public Person(String firstName, String middleName, String lastName, int age) {
aPersonHasAName = new Name();
aPersonHasAName.firstName = firstName;
aPersonHasAName.middleName = middleName;
aPersonHasAName.lastName = lastName;
this.age = age;
}
public Person(Name aPersonHasAName, int age) {
this.aPersonHasAName = aPersonHasAName;
this.age = age;
}
public void details() {
System.out.println(aPersonHasAName + " age: " + age);
}
}
我想这也取决于Name是否有firstName,middleName,lastName
的构造函数