找不到符号,覆盖构造函数时出现错误消息!超类变量是 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;
}
}
我遇到了错误 "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;
}
}