【问题标题】:Same Constructor Name Error相同的构造函数名称错误
【发布时间】:2017-03-01 20:18:57
【问题描述】:

好的,所以我正在尝试创建多个具有相同名称的构造函数。我收到一个错误,我不知道为什么。我基本上是在尝试这样做,以便当玩家输入他们的名字时,即使他们没有输入特定字段(例如后缀等),它仍然可以工作.我知道我仍然需要稍后添加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;
    }

【问题讨论】:

  • 方法签名是一样的...方法是完全一样的...你有3个方法做同样的事情吗?
  • 而且方法不是构造函数。
  • 它们里面的内容只是为了设置它们,我稍后会更改。我只是想弄清楚为什么当所有参数都不同时它会给我一个错误。另外,请不要为难我。我是新手,还在学习。
  • @Zero 参数没有区别
  • 类型,不是变量名!

标签: java oop constructor


【解决方案1】:

当重载方法(或构造函数)时,您只能使用类型签名不同的方法。因此,只有一种方法(同名)采用三个String 参数。但是,您目前没有构造函数。我认为您真正想要的是创建Name 实例,也许还有getter 和setter,最后覆盖toString(这样您就可以获得Name 作为String)。类似的,

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;
}

【讨论】:

  • 哦,好吧。是的,这更有意义。但是,这是课堂作业,我还没有了解 StringBuilder 的功能和附加功能。因此,我不允许在我的代码中使用它。还有其他选择吗?
  • 哦,好吧。非常感谢!
【解决方案2】:

让我们在你有错误的地方使用构造函数

public String playerName(String firstName, String middleInitial, String lastName) { /* error */ }

现在这是另一个你有同样错误的地方

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

那是因为您对它们中的参数和相同数量的参数使用相同的 DATA TYPE。因此,当您使用其中之一时,java 将无法决定调用哪一个。 我希望你现在已经清楚了......

【讨论】:

  • 哦,好吧...好吧,这是有道理的。谢谢!这么快的问题。我将如何设置我的代码,以便当玩家输入他们的名字、中间名和姓氏时,它将与另一种方法中的名字、姓氏和后缀区分开来?比如我将如何设置我的代码以便它可以在正确的方法之间进行选择?
【解决方案3】:

如果你打电话

obj.playerName ("string1", "string2", "string3");

java怎么知道这是否是

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

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

【讨论】:

  • 我以为Java能够识别构造函数重载?
  • 零先生,你能告诉我我打算调用哪种方法吗?
  • 当你调用 playerName() 时,根据你传递给它的参数,Java 应该能够成功地选择应该使用的方法,对吧?
  • 是的,所以在我的回答中,我传递了三个字符串——我想要哪种方法?
  • 一分钱掉了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 2011-01-24
相关资源
最近更新 更多