对象不是抽象的,并且不会覆盖抽象方法

时间:2019-02-06 22:15:45

标签: java class oop inheritance abstract

很抱歉,如果我曾经环顾四周,却找不到适合我特定问题的答案,那么是否曾问过这个问题。无论如何,我正在尝试建立一个商店,出售所有从特定的甜点超类派生的甜点。

当我尝试运行该程序以测试我的类时,出现错误,提示“ Cookie不是抽象的,并且没有对getPrice()公共类{{1 }}。我在另一个名为Fruit的类中遇到了相同的错误,但它与Cookie完全相同,只是具有一些不同的成员变量和方法名称。

这是甜点超类:

Dessert

这是Cookie子类:

Cookie extends Dessert

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

预先感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您的Dessert类具有抽象方法double getPrice(),并且Cookie对其进行了扩展,因此Cookie需要实现getPrice()或也必须抽象才能实现摆脱这个错误。

代码显然不会在当前状态下进行编译,但可以这样考虑-如果我们要实例化Cookie,则其double getPrice()方法是从其超类{{1 }},因此该方法将被调用,但是在DessertCookie中都没有实现,因此调用该方法的结果将不确定。 Java在编译时会看到这种情况,因此可以防止您尝试生成定义不明确的代码。

答案 1 :(得分: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();
}
}