【问题标题】:Trying to extend class with inheritance, but keep getting errors尝试通过继承扩展类,但不断出错
【发布时间】:2016-07-29 07:18:31
【问题描述】:

我有一个产品。我使用的是以前的课程,因为以前和现在的唯一区别是,如果订单数量超过 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;
}
} 

【问题讨论】:

    标签: java inheritance


    【解决方案1】:

    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);
    
    }
    

    【讨论】:

    • 已修复,与 c# 混淆了
    • 谢谢大家。大量帮助
    【解决方案2】:

    DiscountedProduct 类中的构造函数应该是DiscountedProduct 而不是Product

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

    【讨论】:

      【解决方案3】:

      您的 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;
          }
      

      【讨论】:

        猜你喜欢
        • 2015-02-27
        • 1970-01-01
        • 1970-01-01
        • 2010-11-07
        • 2017-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多