所以我有这个抽象类:
abstract class Shape
{
int Width;
int Height;
final String nazwaKształtu;
public Shape(int w, String kształt)
{
nazwaKształtu = kształt;
}
public Shape(int w, int h, String kształt)
{
nazwaKształtu = kształt;
}
void setWidth(int w)
{
Width = w;
}
}
另一个班级形状:
class Square extends Shape
{
Square(int w, String kształt) {
super(kształt); // I get an error here
Width = w;
Height = w;
}
@Override
void setWidth(int w)
{
Width = w;
Height = w;
}
public int getWidth()
{
return Width;
}
public int getHeight(){
return Height;
}
}
但是我收到一条错误消息,告诉我类型有问题。但是在我的抽象类中,我确实有一个应该适用的构造函数。当我将Square类中的构造函数更改为:
Square(int w) {
super("Prostokąt");
Width = w;
Height = w;
}
它仍然无法运作。我犯了什么错误?
答案 0 :(得分:3)
这一行super(kształt);
表示你调用父元素的构造函数,它只需要一个参数,因为kształt
是String,你必须有构造函数,它需要一个String作为参数来使用超级方法。
或者更喜欢它 - 在您的示例中,您希望使用调用此构造函数的super(w, kształt);
:public Shape(int w, String kształt)
答案 1 :(得分:1)
行super(kształt)
正在尝试查找仅接受String
参数的构造函数,但找不到具有该签名的构造函数。
您没有提供在形状类中仅接受String
的构造函数。所有提供的构造函数都接受不同的参数。 Java Compiler无法找到仅使用String作为参数的构造函数。
选择1 - 您可以在超类中添加构造函数。
public Shape(String kształt)
{
nazwaKształtu = kształt;
}
选择2 - 如果由于某种原因你无法在超类中添加构造函数,那么你可能需要调用相应的构造函数,如
super(w, ksztatt);