很抱歉,如果我曾经环顾四周,却找不到适合我特定问题的答案,那么是否曾问过这个问题。无论如何,我正在尝试建立一个商店,出售所有从特定的甜点超类派生的甜点。
当我尝试运行该程序以测试我的类时,出现错误,提示“ Cookie
不是抽象的,并且没有对getPrice()
公共类{{1 }}。我在另一个名为Fruit的类中遇到了相同的错误,但它与Cookie完全相同,只是具有一些不同的成员变量和方法名称。
这是甜点超类:
Dessert
这是Cookie子类:
Cookie extends Dessert
我似乎无法正确设置格式,但是冒号后面的行应该是代码块的一部分。以及该块后面的花括号。
预先感谢您的帮助!
答案 0 :(得分:1)
您的Dessert
类具有抽象方法double getPrice()
,并且Cookie
对其进行了扩展,因此Cookie
需要实现getPrice()
或也必须抽象才能实现摆脱这个错误。
代码显然不会在当前状态下进行编译,但可以这样考虑-如果我们要实例化Cookie
,则其double getPrice()
方法是从其超类{{1 }},因此该方法将被调用,但是在Dessert
或Cookie
中都没有实现,因此调用该方法的结果将不确定。 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();
}
}