我正在尝试制作披萨菜单。我有3个班级,
作为成本变量用于基础,顶部和整个披萨本身。
现在我的问题是,我将如何创建一个Pizza对象,然后创建一个基础对象和几个浇头对象,每个对象都有价格?
我可以弄清楚如何计算整体价格,我只是有点卡住在对象中创建对象。
public class PizzaTopping extends Pizza{
private String topping;
public String getTopping(){
return this.topping;
}
public void setTopping( String topping ){
this.topping = topping;
}
}
public class PizzaBase extends Pizza{
private String base;
public void setBase( String base ){
this.base = base;
}
public String getBase(){
return this.base;
}
}
public class Pizza {
private double cost;
public void setCost( double cost ){
this.cost = Math.abs(cost);
}
public double getCost(){
return this.cost;
}
public void makingPizza(){
PizzaBase b = new PizzaBase();
}
}
答案 0 :(得分:1)
用CostableItem类替换Pizza类:
public class CostableItem {
private double cost;
public void setCost( double cost ){
this.cost = Math.abs(cost);
}
public double getCost(){
return this.cost;
}
}
然后在浇头和底座中延伸:
public class PizzaBase extends CostableItem {...}
public class PizzaTopping extends CostableItem {...}
之后创建一个名为Pizza的类,它有一个基础和多个浇头:
public class Pizza{
private PizzaBase base;
private ArrayList<PizzaToppings> toppings;
//..
}
答案 1 :(得分:0)
你根本不需要继承。您最多可能需要一个界面。所以我会这样设计:
public interface PricedItem {
double getCost(); //double is suitable for our purposes
}
由于您要计算成本,因此定价商品的所有内容都应采用getCost()
方法。这适用于您的PizzaTopping
,PizzaBase
和Pizza
类:
public class PizzaTopping implements PricedItem
private String name;
private double cost;
public PizzaTopping(String name, double cost) {
this.name = name;
this.cost = cost;
}
...
@Override
public double getCost() {
return cost;
}
}
PizzaBase
或多或少相同:
public class PizzaBase implements PricedItem {
private double cost;
...
}
您的Pizza
课程也将实施PricedItem
。但同样重要的是,您将拥有PizzaTopping
个实例的集合;这里没有继承权!
public class Pizza implements PricedItem {
private double cost;
private PizzaBase base;
private List<PizzaTopping> toppings;
public Pizza(double cost, PizzaBase base) {
this.cost = cost;
this.base = base;
toppings = new ArrayList<PizzaTopping>();
}
...
public void addTopping(PizzaTopping topping) {
//left as an exercise to the reader :)
}
@Override
public double getCost() {
//this is left as an exercise to the reader :)
return totalCost;
}
}