[英]Error when extending from abstract parent class
public Cat (String nm, int legs, String sd, String col)
对于这个构造函数,我得到了以下编译器错误:
constructor Animal in class Animal cannot be applied to given types;
required: String, int
found: no arguments
reason: actual and formal arguments lists differ in length
父类就在子类的下方。
public class Cat extends Animal {
private String sound;
private String colour;
public Cat (String nm, int legs, String sd, String col) {
nm = super.getName();
legs = super.getNumOfLegs();
sound = sd;
colour = col;
}
public abstract class Animal {
protected String name;
protected int numOfLegs;
public Animal() {
}
public Animal(String nm, int legs) {
name = nm;
numOfLegs = legs;
}
public String getName() {
return name;
}
public int getNumOfLegs() {
return numOfLegs;
}
public abstract String display();
}
}
父抽象类应该放在一个单独的文件中吗?
我最初尝试过,但它返回的错误比现在多得多,尤其是来自抽象方法display()
的错误。
是什么导致了错误?
有几件事你应该改变。
首先,把超类放到一个单独的文件中是最好的方法。 如果你想保留在一个文件中,你需要将它拖出 Cat 类并删除范围(不是公共或私有的)。 但这对于超类来说不是一个好的编码风格。
接下来是名称/nm 和 legs/numOfLegs。 要么调用超级构造函数并提供两个变量(参见我的示例),要么使用 name = nm; 和 numOfLegs = 腿;
您还应该重新考虑 name 和 numOfLegs 变量是否需要保护,或者是否可以仅通过 getter 提供访问权限。
如果腿的数量、名称、声音和颜色不会改变,您也可以使它们不可变(使用关键字 final,例如 private final String sound)。 如果没有,您可以使用 setter 访问它们。
最后你需要在 Cat 类中实现抽象方法......
public class Cat extends Animal {
private String sound;
private String colour;
public Cat(String nm, int legs, String sd, String col) {
super(nm, legs);
sound = sd;
colour = col;
}
@Override
public String display() {
return null;
}
}
abstract class Animal {
protected String name;
protected int numOfLegs;
public Animal(String nm, int legs) {
name = nm;
numOfLegs = legs;
}
public String getName() {
return name;
}
public int getNumOfLegs() {
return numOfLegs;
}
public abstract String display();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.