当我尝试定义这三个构造函数时,为什么会出现错误?给出的例子

时间:2011-10-18 00:31:46

标签: java methods

好的问题是,NetBeans说第二个已经定义了。这三个是我在顶部的构造函数,如果set或get方法是它的错误,则列出整个程序。所以要明确我在谈论

public Dog(String initialName) public Dog(String initialBreed) 公狗(double initialWeight)

错误显示在公共Dog(String initialBreed)上。我是否滥用了重载方法?此外,我必须使用它必须的重载方法。

package dog;


import java.util.*;
public class Dog 
{

// instance variables
private String name;
private String breed;
private double weight;

 public Dog( )
{
name = "no name";
breed = "no breed";
weight = 0.0;
}

public Dog(String initialName)
{
name = initialName;
breed = "no breed";
weight = 0.0;
     }

public Dog(String initialBreed){
   name = "no name";
   breed = initialBreed;
   weight = 0.0;
 }
public Dog(double initialWeight){
    name = "no name";
    breed = "no breed";
    weight = initialWeight;
     }


  public void SetDog(String newName, String newBreed, double newWeight) 
  {
   name = newName;
   breed = newBreed;
   if (newWeight <= 0)
      System.out.println("Error: Negative weight.");
   else
       weight = newWeight;
    }
public void setName(String newName){
    name = newName;
}
public void setBreed(String newBreed){
    breed = newBreed;
}
public void setWeight(double newWeight){
    weight = newWeight;
}

public double getWeight(){
     return weight;
}
public String getName(){
     return name;
}
public String getBreed(){
    return breed;
}

}

2 个答案:

答案 0 :(得分:3)

问题是你的两个构造函数采用相同的参数:

public Dog(String initialName)

public Dog(String initialBreed){

他们都采取string。您不能拥有两个具有完全相同名称和参数的方法。

根据我的想法,您可能需要一个构造函数来获取所有这三个参数:

public Dog(String initialName, String initialBreed, double initialWeight){

答案 1 :(得分:0)

由于两个构造函数接收到一个相同类型的参数(String),因此编译器无法区分它们。也许你可以定义一个新的构造函数,它考虑到其中一个参数可能为null,例如:

public Dog(String initialBreed, String initialName) {
    name = initialName != null ? initialName : "no name";
    breed = initialBreed != null ? initialBreed : "no breed";
    weight = 0.0;
}