类中重载的构造函数

时间:2015-01-30 16:47:24

标签: java constructor

我正在一个类中重载构造函数的项目,我有点卡住了,下面是我应该对重载的构造函数做的事情:

"允许将第一个,中间名和姓氏作为带有年龄的int的字符串传递

接受Name对象引用,age作为int

  • 在Person中创建一个新名称,复制名称部分的引用。"

我不太确定如何处理我的代码,这就是我所得到的:

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和面向对象编程的新手。

3 个答案:

答案 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

的构造函数