对象不是抽象的,不重写抽象方法

问题描述 投票:0回答:2

道歉,如果这个问题已经被问过,但我没有环顾四周,没有找到适用的答案,我的特定问题。反正,我试图模拟一个商店出售这些都从一个特定的甜品超衍生甜点。

当我尝试运行程序来测试我的课,我得到一个错误说“Cookie不是抽象的,不以getPrice()公共类Dessert抽象方法Cookie extends Dessert。我收到一个名为水果另一大类相同的错误,但它更或更小的精确相同的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;
    }
} 

我似乎无法得到正确的格式,但紧跟在冒号线应该是代码块的一部分。以及块以下大括号。

先谢谢您的帮助!

java class oop inheritance abstract
2个回答
1
投票

由于Cookie.java延伸Dessert.java和后者具有abstract方法getPrice() Cookie.java必须为它提供的定义。 (除非它本身是抽象的。一会做,如果我们拥有的东西,如OatmealCookie ChocolateChipCookie那将是一定的阶级。)

我赶紧重新打字的材料,因为这些问题git的降价并得到了这些编译。我假设价格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();
}
}

1
投票

Dessert类有一个抽象方法double getPrice()Cookie扩展,所以Cookie需要实现getPrice()或也是为了抽象摆脱这种错误的。

该代码显然不其当前状态编译,但认为它是这样的 - 如果我们实例化一个Cookie,其double getPrice()方法是从它的超类继承Dessert,因此该方法将存在被调用,但它有在任一CookieDessert,因此调用它的结果没有实现将是不确定的。 Java的认为这在编译时间,所以会阻止您尝试生成定义错误代码。

© www.soinside.com 2019 - 2024. All rights reserved.