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