重写构造函数时找不到符号,错误信息!超类变量是公共的

时间:2015-10-07 03:07:32

标签: java inheritance constructor subclass superclass

我有错误"找不到符号"并指我创建我试图在我的子类中的超类中使用的变量,即使我将变量设置为public。我的这个代码的目标是在我的子类中采用两个参数:" productName"和"数量"并将它们传递给我的超类并将它们分配给相关的变量。我还需要传递" 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;
    }

}

亲切的问候

3 个答案:

答案 0 :(得分:1)

  

super(productName,quantity,discount);

是错误的,因为它想调用一个带有3个参数的构造函数,这些参数在Order1中不存在。摆脱“折扣”

  

DISCOUNT = .40;

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

  

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

“this”没用,因为函数中没有其他具有相同名称的变量。所以实际上你正在做“productName = productName;”和“数量=数量;”。如果正确使用“超级”,它们将毫无用处。

答案 1 :(得分:0)

你没有一个带有3个参数的Order1构造函数。 您试图调用类Order1中不存在的构造函数。在Order1类中创建一个三参数构造函数:

public Order1(productName, quantity, discount)

答案 2 :(得分:0)

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

首先,您可以直接在构造函数中为balance = int(input("Enter initial balance: $ ")) count = 1 total =0 while count <= 11: n = int(input("Enter deposit %s #: " %(count))) count += 1 total += n #keep on adding deposit amounts. print("Original price: $ %d" %balance) print("Final Amount: $ %d" %(total + balance) ) 变量赋值。

balance = int(input("Enter initial balance: $ "))
for i in range(11):
    n = int(input("Enter deposit #: %s " %(i)))
    total +=n

print("Original price: $ %d" %balance)
print("Final Amount: $ %d" %(total + balance) )

其次,如果您希望子类可以访问超类变量,则最好使用discount而不是this.discount = 0.4;

您的protected课程应该如下所示:

public