这是我的代码,我正在尝试将参数从main传递给cat类,但是它说没有构造函数无法弄清楚该怎么做一点帮助将不胜感激。
public class Cat extends Animal implements Pet {
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Cat(String name, int legs) {
super(4);
this.name = name;
}
public Cat() {
this("Fluppy"); //ERROR OVER HERE
}
@Override
public void play() { //THIS METHOD IS OVERRIDDEN FROM PET INTERFACE
System.out.println(name+"Likes to play with string");
}
@Override
public void eat() { /*THIS METHOD IS OVERRIDDEN FROM ANIMAL ABSTRACT METHOD.*/
System.out.println("Cats likes to eat spiders and fish");
}
}
和主要课程
public class PetMain {
public static void main(String[] args) {
Animal a;
Pet p;
Cat c= new Cat("Tom"); //IM GETTING THE ERROR OVER HERE.
c.eat();
c.walk();
c.play();
}
}
答案 0 :(得分:1)
在Cat
public Cat(String name, int legs) { // accept String and int constructor
super(4);
this.name = name;
}
public Cat() { // no argument constructor
this("Fluppy");
}
new Cat("String")
您可以添加新的构造函数
public Cat(String anyThing) {
}
答案 1 :(得分:1)
尝试使用带有两个参数的正确构造函数
Cat c= new Cat("Tom", 4);
和
this("Fluppy", 4);
或为一个参数创建一个新的构造函数,如
public Cat(String name) {
this (name, 4);
}
答案 2 :(得分:1)
当你打电话给
时,首先要做的事情Cat c= new Cat("Tom");
它希望你的Cat类有一个你的类不包含的参数构造函数,所以在你的Cat类中创建一个单独的参数构造函数
public Cat(String str) {
// your logic
}
其次this("Fluppy"); //ERROR OVER HERE
如果您了解constructor chaining
,那么您就不会这样做了。当你想从一个构造函数中调用同一个类的另一个构造函数时,通常会使用this(),因为你从默认构造函数中调用了一个参数化的构造函数,因为一个参数化的构造函数不存在它会给你编译错误
答案 3 :(得分:0)
您正试图在以下位置重载构造函数:
public Cat() {
this("Fluppy"); //ERROR OVER HERE
}
但是调用是针对具有一个String参数的构造函数。您没有带有一个String参数的构造函数,因此您尝试添加时会出错。
public Cat(String catty) {
// initialise
}