找不到符号,覆盖构造函数时出现错误消息!超类变量是 public

Cannot find symbol, Error message when overriding constructor! Superclass variables are public

我遇到了错误 "Cannot find symbol" 并指示我创建我试图在我的子类中从我的超类使用的变量,即使我将该变量设置为 public。我使用此代码的目标是在我的子类中获取两个参数 "productName" 和 "quantity" 并将它们传递给我的超类并将它们分配给相关变量。我还需要将 "DISCOUNT" 的值传递给超类变量 "discount".

如能就此问题提供任何帮助,我们将不胜感激。

包含变量和相关构造函数的我的超类代码如下。

public class Order1 {

public String productName;
private double price;
public int discount;
public int quantity;
private double total;
private String message;
private boolean isDiscounted;
private boolean isValidOrder;
private static int orderNum = 0


public Order1() {
    // sets validity to false, sets message, increments orderNum by 1
    isValidOrder = false;
    message = "**ERROR**: Order number cannot be totalled as no details have  been supplied";
    orderNum = orderNum + 1;
}

public final void Order1(String productName, int quantity) {
    // sets productName variable to productName parameter value
    this.productName = productName;
    testQuantity(quantity);
}

public Order1(String productName) {
    // sets productName variable to productName parameter value
    this.productName = productName;

}

下面的代码是我的子类

package Order;

/**
 *
* @author Aurya
*/
public class InternalOrder extends Order1 {
    private final static double DISCOUNT;

    public InternalOrder(double DISCOUNT) {
        super(productName, quantity, discount);
        DISCOUNT = .40;
        this.discount = DISCOUNT;
        this.productName = productName;
        this.quantity = quantity;
    }

}

亲切的问候

super(productName, quantity, discount);

是错误的,因为它要调用一个带有 3 个参数的构造函数,而这在 Order1 中是不存在的。去掉 "discount"

DISCOUNT = .40;

没有意义。你修改构造函数参数(已经很奇怪),甚至在获取它的值之前。

this.productName = productName; this.quantity = quantity;

"this"没有用,因为函数中没有其他同名变量。所以实际上你在做 "productName = productName;" 和 "quantity = quantity;"。如果"super"使用正确,它们将毫无用处。

您没有带 3 个参数的 Order1 构造函数。 您正在尝试调用 class Order1 中不存在的构造函数。在 Order1 class :

中创建一个三参数构造函数
public Order1(productName, quantity, discount)

以上回答已经指出了你在构造函数中的问题。如果我对你的代码理解正确,你想对所有内部订单应用固定折扣 (40%)。

首先,您可以直接在构造函数中为 discount 变量赋值。

this.discount = 0.4;

其次,如果你想让你的子classes访问superclass变量,最好使用protected而不是public

您的 InternalOrder class 应如下所示:

public class InternalOrder extends Order1 {

    public InternalOrder() {
        super(productName, quantity);
        this.discount = 0.4;
    }

}