尝试使用继承扩展类,但不断收到错误

时间:2016-07-28 22:54:58

标签: java inheritance

我有一个产品。我使用的是前一类,因为先前和现在之间的唯一区别是,如果订单数量超过10个单位,可以选择10%的折扣(浮点数0.1),可以乘以价格。

我使用DisountedProduct作为继承类扩展了Product类,但是当我从父类调用构造函数时,我得到错误"无效的方法声明,需要返回类型。"

我已经阅读了java继承的解释,但它没有提到这一点。

请帮忙

public class DiscountedProduct extends Product {

private float discount;
private String name;
private double price;
private int quantity;

public Product(String name, double price, int quantity){
    this.name = name;
    this.price = price;
    this.quantity = quantity;
}

//Get//

public float getDiscount(){
    return discount;
}

//Set//

public void setDiscount(float value){
    this.discount = value;
}
}


    public class Product {

private String name;
private double price;
private int quantity;

public Product(String name, double price, int quantity){
    this.name = name;
    this.price = price;
    this.quantity = quantity;
}

//Get Methods//

public String getName(){
    return name;
}

public double getPrice(){
    return price;
}

public int getQuantity(){
    return quantity;
}

public double getTotalPrice(){
    return quantity * price;
}

//Set Methods//
public void setName(String value){
    this.name = value;
}

public void setPrice(double value){
    this.price = value;
}

public void setQuantity(int value){
    this.quantity = value;
}
} 

3 个答案:

答案 0 :(得分:6)

DiscountedProduct中,替换

public Product(String name, double price, int quantity)

public DiscountedProduct(String name, double price, int quantity)

你有错误类的构造函数

此外,您不需要在DiscountedProduct构造函数中设置所有变量,只需调用超级构造函数;用

替换整个方法
public DiscountedProduct(String name, double price, int quantity) {
    super(name, price, quantity);

}

答案 1 :(得分:0)

DiscountedProduct课程中的构造函数应为DiscountedProduct而不是Product

此外,DiscountedProduct不应定义已在父项中定义的字段,构造函数应调用super(name, price, quantity)而不是初始化字段本身。

答案 2 :(得分:0)

您的Product类设置正常 - 问题似乎出现在DiscountedProduct类的构造函数中。 DiscountedProduct类的构造函数应与类名称相同:DiscountedProduct。此外,nameprice等对象参数已由父类Product定义。 super()方法调用Product类构造函数。您需要调用super()方法并将用于实例化DiscountedProduct的值传递给它。

public DiscountedProduct(String name, double price, int quantity){
    super(name, price, quantity);
}

固定构造函数应该与上面的块类似。在我的机器上没有问题。

如果您希望DiscountedProduct具有其父类没有的参数,您可以在其构造函数中定义它并传入相应的参数,如下所示:

public DiscountedProduct(String name, double price, int quantity, float defaultDiscount){
        super(name, price, quantity);
        this.discount = defaultDiscount;
    }