类Dog中的构造函数Dog不能应用于给定类型

时间:2018-03-27 03:57:03

标签: java oop object inheritance

不确定这里的问题是什么,但我试图让这个程序编译,我不能。我需要这个来创造并让狗,拉布拉多和约克都能说话。我给出的提示是在子类的构造函数中缺少某些东西,但我没有看到它。我一直得到的错误是“类Dog中的构造函数狗不能应用于给定的类型”。我是Java的新手,所以你能给我的任何帮助都会很棒。提前谢谢!

package dogtest;
public class DogTest {

public static void main(String[] args) {

    Dog dog = new Dog("Spike");
    System.out.println(dog.getName() + " says " + dog.speak()); 

    Labrador boop = new Labrador(name, color);
    Yorkshire beep = new Yorkshire(name);
}}


package dogtest;
public class Dog {

protected String name;

public void Dog(String name)
{
    this.name = name;
}

public String getName()
{
    return name;
}

public String speak()
{
    return "Woof";
}}



package dogtest;
public class Labrador extends Dog{

private String color; 
private static int breedWeight = 75;

public Labrador(String name, String color)
{
    this.color = color;
}

public String speak()
{
    return "WOOF";
}

public static int avgBreedWeight()
{
    return breedWeight;
}}



package dogtest;
public class Yorkshire extends Dog {

public Yorkshire(String name)
{
    super(name);
}

public String speak()
{
    return "woof";
}}

2 个答案:

答案 0 :(得分:1)

如注释中所述,构造函数与方法类似,它应该与您的类名Dog具有相同的名称(您正确地执行了此部分),但它们没有返回类型他们的签名。因此,为了使具有String参数的构造函数更改

public void Dog(String name) // this is only a method with the same name as the class
{
    this.name = name;
}

进入

public Dog(String name) // this is a real constructor since doesn't have a return type
{
     this.name = name;
}

在将上述方法更改为构造函数之前,出现以下错误:

  

“类Dog中的构造函数Dog不能应用于给定类型”

正在发生,因为当您未明确指定构造函数时,编译器将添加默认的 no-arg 构造函数。然后编译器会给你这个错误,因为它找不到带有String参数的构造函数。

答案 1 :(得分:0)

我修复了代码的编译错误

  • 删除constrctor'public void Dog(String name)'
  • 的void关键字
  • 向拉布拉多承包商'super(name)'
  • 添加超级构造函数调用
  • 将字符串转换为main方法中的名称和颜色参数

    Labrador boop =新拉布拉多(“名字”,“颜色”);   Yorkshire beep = new Yorkshire(“name”);

我没有将包和导入添加到代码

G