当前位置: 首页 > 知识库问答 >
问题:

无法应用父类中的构造函数

蓝夕
2023-03-14

我正在尝试编写一个程序,该程序采用不同形状的地毯,并使用子类中定义的某些变量创建地毯对象。我的代码是

public abstract class Carpet{

protected int area = 0;
protected double unitPrice = 0;
protected double totalPrice = 0.0;
protected String carpetID;

public Carpet(String id, double thisPrice){
    carpetID = id;
    unitPrice = thisPrice;
}

public String getCarpetId(){
    return carpetID;
}

public String toString(){
    String carpet = new String("\n" + "The CarpetId:\t\t" + getCarpetId() + "\nThe Area:\t\t" + area + "\nThe Unit Price\t\t" + unitPrice + "\nThe Total Price\t" + totalPrice + "\n\n");
    return carpet;
}

public abstract void computeTotalPrice();

}

子类是

public class CircleCarpet extends Carpet{

private int radius;

public CircleCarpet(String id, double priceOf, int rad){
    radius = rad;
    super.unitPrice = priceOf;
    computeTotalPrice();

}

public void computeTotalPrice(){
    super.area = radius * radius * 3;
    super.totalPrice = area * unitPrice;
}


public String toString(){
    String forThis = new String("\nThe Carpet Shape:\tCircle\nThe radius:\t\t" + radius + "\n");
    return forThis + super.toString();
}

}

但每当我试图编译子类时,我都会遇到错误

11: error: constructor Carpet in class Carpet cannot be applied to given types;
public CircleCarpet(String ID, double priceOf, int rad){
                                                       ^


 required: String,double
  found: no arguments
  reason: actual and formal argument lists differ in length
1 error

Tool completed with exit code 1

我不知道该怎么修理它。

共有1个答案

百里默
2023-03-14

由于您的超类没有< code >无参数默认构造函数,您需要使用super()从子类构造函数中显式调用您的超类构造函数。并不是说这必须是子类构造函数的第一行。

 public CircleCarpet(String ID, double priceOf, int rad){
    super(ID, priceOf)
    radius = rad;
    super.unitPrice = priceOf;
    computeTotalPrice();

}

忠告:

遵循Java命名约定,变量名应该是camelCase。即,在这种情况下,< code>id比< code>ID更合适。

 类似资料:
  • 问题内容: 我正在尝试编写一个程序,该程序采用不同形状的地毯,并使用子类中定义的某些变量创建地毯对象。我的代码是 而子类是 但是每当我尝试编译子类时,都会出现错误 我不确定该如何解决。 问题答案: 由于您的超类没有子类,因此您需要使用 super() 从子类构造函数中显式调用您的超类构造函数。这不必是子类构造函数的第一行。 一个建议: 遵循Java命名约定,变量名称应为camelCase。即,在这

  • 我有一个主类,DataManager,它有一个子类FileHandler,它扩展了DataManager。 另一类: 我遇到了一个错误,指出构造函数不能应用于给定类型。这是我第一次在Java中使用继承,这个问题对我来说并没有太大帮助。 下面是我从NetBeans获得的更具体的版本... “DataManager类中的构造函数DataManager不能应用于给定类型;必需:找到文件:无参数原因:实际

  • 问题内容: 我有一个“ ChildClass”类,它扩展了“ ParentClass”类。我不想完全替换父类的构造函数,而是要先调用父类的构造函数,然后再做一些额外的工作。 我相信默认情况下会调用父类的0参数构造函数。这不是我想要的 我需要用参数调用构造函数。这可能吗? 我试过了 但这不起作用,因为您无法修改“ this”。 问题答案: 您可以从子代的构造函数中以“ super”引用父代的构造函数

  • 所以我在学习java继承,我遇到了一个我不知道如何解决的问题。 我要做的是从超类中调用一个子类构造函数。我不知道这是否有任何意义,但我会尝试用一个例子来解释我自己。 我为什么要这么做? 我希望能够主要不必处理智能手机。 我希望能够做到:

  • 我正在用Lombok插件做一个Spring项目。我添加了注释,并使父类的字段最终初始化,使用@AllArgsConstructor或@必需ArgsConstructor而不是字段注入(使用类字段的@autowed)。但是,由于某种原因,子类DraftsPostmethod报告了一条消息,即在父类AbstractFuntoryServicemethod中没有找到默认构造函数 我不确定是什么导致了它,

  • 问题内容: 我需要在PHP中有一个类构造函数,而不调用父构造函数来调用其父母的 父母 (祖父母?)构造函数。 我知道这是一件奇怪的事情,我正在尝试找到一种闻起来并不难闻的方法,但是尽管如此,我很好奇。 问题答案: 丑陋的解决方法是将一个布尔参数传递给Papa,指示您不希望解析其构造函数中包含的代码。即: