这样写我的 class 是否正确?问题在于getPrice()
类中的Item
方法。每个项目都需要有一个getPrice()
。但我实际上无法退货。因此,我用this.getPrice()
触发,以获取ProductItem
的价格。有没有更可靠/设计更好的解决方案?
class Item {
String description;
public Item(String description) {
this.description = description;
}
double getPrice(){return this.getPrice();} //TODO Correct like this?
}
class ProductItem extends Item {
int amount;
double pricePerUnit;
public ProductItem(String description, int amount, double pricePerUnit) {
super(description);
this.amount = amount;
this.pricePerUnit = pricePerUnit;
}
@Override
double getPrice(){
return amount * pricePerUnit;
}
}
最佳答案
听起来Item
应该是一个抽象类,然后getPrice()
是一个抽象方法:
public abstract class Item {
private final String description;
public Item(String description) {
this.description = description;
}
public abstract double getPrice();
public String getDescription() {
return description;
}
}
这意味着您将无法写
Item item = new Item("foo"); // Invalid, because Item is abstract
但是你可以这样写:
Item item = new ProductItem("foo", 10, 2.0);
double p = item.getPrice(); // 20.0
您声明的每个具体(非抽象)子类都必须重写
getPrice()
并提供一个实现。有关更多详细信息,请参见abstract classes and methods section of the Java tutorial。