Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 相同构造函数名称错误_Java_Oop_Constructor - Fatal编程技术网

Java 相同构造函数名称错误

Java 相同构造函数名称错误,java,oop,constructor,Java,Oop,Constructor,好的,我试着用相同的名字构造多个构造函数。我得到了一个错误,我不知道为什么。我基本上是在尝试这样做,当一个玩家输入他们的名字,即使他们没有输入一个特定的字段,如后缀等,它仍然会工作。我知道我仍然需要添加setter和getter等,但我只是想现在就设置构造函数。你知道为什么会给我一个错误吗 public class Name { private String firstName; private String middleInitial; private String l

好的,我试着用相同的名字构造多个构造函数。我得到了一个错误,我不知道为什么。我基本上是在尝试这样做,当一个玩家输入他们的名字,即使他们没有输入一个特定的字段,如后缀等,它仍然会工作。我知道我仍然需要添加setter和getter等,但我只是想现在就设置构造函数。你知道为什么会给我一个错误吗

public class Name {
    private String firstName;
    private String middleInitial;
    private String lastName;
    private String suffix;


    public String playerName(String firstName, String middleInitial, String lastName, String suffix){

        this.firstName = firstName; 
        this.middleInitial = middleInitial;
        this.lastName = lastName;
        this.suffix = suffix;
        return suffix + firstName + middleInitial + lastName;
    }

    public String playerName(String firstName, String lastName){

        this.firstName = firstName; 
        this.middleInitial = middleInitial;
        this.lastName = lastName;
        this.suffix = suffix;
        return suffix + firstName + middleInitial + lastName;
    }

    public String playerName(String firstName, String middleInitial, String lastName){ //this is where the error is. "Duplicate method playerName (String String String) in type Name"

        this.firstName = firstName; 
        this.middleInitial = middleInitial;
        this.lastName = lastName;
        this.suffix = suffix;
        return suffix + firstName + middleInitial + lastName;
    }

    public String playerName(String firstName, String lastName, String suffix){//same error here

        this.firstName = firstName; 
        this.middleInitial = middleInitial;
        this.lastName = lastName;
        this.suffix = suffix;
        return suffix + firstName + middleInitial + lastName;
    }
如果你打电话

obj.playerName ("string1", "string2", "string3");
java如何知道这是否正确

public String playerName(String firstName, String middleInitial, String lastName)


让我们在出现错误的地方使用构造函数

public String playerName(String firstName, String middleInitial, String lastName) { /* error */ }
这是另一个你有同样错误的地方

public String playerName(String firstName, String lastName, String suffix){ /* same error */ }
这是因为您对它们中的参数使用相同的数据类型,并且参数数量相同。因此,在这里,当您使用其中一个时,java将无法决定调用哪一个。 我希望您现在明白了…

当重载方法(或构造函数)时,您只能拥有类型签名不同的方法。因此,只有一个方法(同名)接受三个
String
参数。但是,您当前没有构造函数。我认为您真正想要的是创建
Name
实例,可能还有getter和setter,最后覆盖
toString
(这样您就可以将
Name
作为
字符串来获取)。大概

public class Name {
    private String firstName;
    private String middleInitial = "";
    private String lastName;
    private String suffix = "";

    public Name(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public Name(String firstName, String middleInitial, String lastName) {
        this(firstName, lastName);
        this.middleInitial = middleInitial;
    }

    public Name(String firstName, String middleInitial, String lastName, 
                String suffix) {
        this(firstName, lastName, middleInitial);
        this.suffix = suffix;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getMiddleInitial() {
        return middleInitial;
    }

    public void setMiddleInitial(String middleInitial) {
        this.middleInitial = middleInitial;
    }

    public String getLastName() {
        return lastName;
    }

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

    public String getSuffix() {
        return suffix;
    }

    public void setSuffix(String suffix) {
        this.suffix = suffix;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(firstName);
        if (sb.length() > 0) {
            sb.append(' ');
        }
        if (middleInitial.length() > 0) {
            sb.append(middleInitial).append(' ');
        }
        sb.append(lastName);
        if (suffix.length() > 0) {
            sb.append(' ');
            sb.append(suffix);
        }
        return sb.toString();
    }
}
示例
toString
正在执行
String
串联,您可以执行效率较低的操作

@Override
public String toString() {
    String str = firstName;
    if (str.length() > 0) {
        str += " "; // <-- str = str + " ";
    }
    if (middleInitial.length() > 0) {
        str += middleInitial + " ";
    }
    str += lastName;
    if (suffix.length() > 0) {
        str += " " + suffix;
    }
    return str;
}
@覆盖
公共字符串toString(){
字符串str=firstName;
如果(str.length()>0){
str+=“”;//0){
str+=middleInitial+“”;
}
str+=姓氏;
if(后缀.length()>0){
str+=“”+后缀;
}
返回str;
}

方法签名是相同的…方法是完全相同的…你有3个做相同事情的方法吗?并且这些方法不是构造函数。它们里面的内容只是为了设置它们,我稍后会更改。我只是想弄清楚,当所有方法的参数都不同时,为什么会给我一个错误m、 另外,请不要给我太多的时间。我是新手,还在学习。@Zero参数不是不同的类型,不是变量名!我以为Java能够识别构造函数重载?你呢Zero先生,你能告诉我我要调用哪个方法吗?当你调用playerName()时,取决于您传递的参数,Java应该能够成功地选择它应该使用的方法,对吗?是的,所以在我的回答中,我传递了三个字符串-我想要哪种方法?便士下降了吗?Ohh okayy…好的,这是有意义的。谢谢!这么快的问题。我应该如何设置我的代码,以便在player在firstName、middleInitial和lastName中键入。这与另一个方法中的firstName、lastName和后缀有区别吗?比如,我该如何设置代码以便在正确的方法之间进行选择?哦,好的。是的,这更有意义。但是,这是一个类的赋值,我还没有了解StringBuilder和应用程序的功能结束。因此,我不允许在我的代码中使用它。还有其他选择吗?哦,好的。非常感谢!
@Override
public String toString() {
    String str = firstName;
    if (str.length() > 0) {
        str += " "; // <-- str = str + " ";
    }
    if (middleInitial.length() > 0) {
        str += middleInitial + " ";
    }
    str += lastName;
    if (suffix.length() > 0) {
        str += " " + suffix;
    }
    return str;
}