【问题标题】:Object is not abstract and does not override abstract method对象不是抽象的,不会覆盖抽象方法
【发布时间】:2019-02-06 22:15:45
【问题描述】:

抱歉,如果之前有人问过这个问题,但我确实环顾四周,找不到适用于我的具体问题的答案。无论如何,我正在尝试为一家销售甜点的商店建模,这些甜点都派生自特定的 Dessert 超类。

当我尝试运行程序来测试我的类时,我收到一条错误消息,说“Cookie 不是抽象的,并且在Dessert 公共类Cookie extends Dessert 中没有抽象方法getPrice()。我得到了同样的结果另一个名为 Fruit 的类出错,但它或多或少与 Cookie 完全相同,只是成员变量和方法名称不同。

这里是甜点超类:

public abstract class Dessert {

    /** Name of the dessert item. */
    protected final String name;

    /**
     * Constructs a new dessert item.
     * @param name Name of the dessert.
     */
    public Dessert(String name) {
        this.name = name;
    }

    /**
     * Get name of the dessert.
     * @return dessert name
     */
    public final String getName() {
        return name;
    }

    /**
     * Get the price of the dessert.
     * @return Dessert price
     */
    public abstract double getPrice();
}

这里是 Cookie 子类:

public class Cookie extends Dessert {
    private int number;
    private double price;

    public Cookie (String name, int number, double price) {
        super(name);
        this.number = number;
        this.price = price;
    }

    public int getItemCount() {
        return number;
    }

    public double getPricePerDozen() {
        return (price / 12) * number;
    }
} 

我似乎无法正确格式化,但紧跟在冒号后面的行应该是代码块的一部分。以及块后面的花括号。

提前感谢您的帮助!

【问题讨论】:

  • mmmmmm....饼干.....
  • 我有理由相信您的错误消息实际上抱怨Cookie 没有覆盖 Desert.getPrice()(即您的问题删除了一个关键词“覆盖”)。这有帮助吗?如果不是,究竟是什么让您对错误消息感到困惑?

标签: java class oop inheritance abstract


【解决方案1】:

因为Cookie.java 扩展了Dessert.java 并且后者有一个 abstract 方法 getPrice() Cookie.java 必须为其提供定义。 (除非它本身是抽象的。 如果我们有诸如OatmealCookie 之类的东西,我们会这样做 ChocolateChipCookie 那将是明确的类别。)

由于 git markdown 的问题,我很快重新输入了材料并得到了 这些要编译。我认为Cookie 的价格应该是 每打价格并为其添加适当的定义:

public abstract class Dessert {

protected final String name;

public Dessert (String name) {
this.name = name;
}

public final String getName() {
  return name;
}
public abstract double getPrice ();
}



public class Cookie extends Dessert {
private int number;
private double price;

public Cookie (String name, int number, double price) {
  super (name);
  this.number = number;
  this.price = price;
}

public int getItemCount() {
  return number;
}

public double getPricePerDozen() {
  return (price/12) * number;
}

public double getPrice() {
  return getPricePerDozen();
}
}

【讨论】:

    【解决方案2】:

    您的Dessert 类有一个抽象方法double getPrice(),并且Cookie 扩展了它,所以Cookie 需要实现getPrice() 或者也是抽象的,以消除这个错误。

    代码在当前状态下显然不能编译,但是这样想——如果我们要实例化一个Cookie,它的double getPrice()方法继承自它的超类Dessert,所以该方法将存在被调用,但它在CookieDessert 中都没有实现,因此调用它的结果将是未指定的。 Java 在编译时会看到这一点,因此可以防止您尝试生成定义不明确的代码。

    【讨论】:

      猜你喜欢
      • 2014-06-20
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      相关资源
      最近更新 更多