我对编程非常陌生,并且有一个任务是创建一个简单的披萨订购程序。它应该利用对象并利用继承。对于作业的第一部分,我必须创建:
1) PizzaBase 类 - 模拟披萨底(厚或薄)
2) PizzaTopping 类 - 模拟披萨配料
3) Pizza 类 - 携带有关披萨的基本信息,包括单一底料和多种配料
创建和存储顶部和基础对象的最佳方法是什么?我将如何在这个程序中实现继承?后来,我必须创建一个用户界面来使用配料和基础对象接受订单,并检查披萨是否适合素食者。
这是我到目前为止的一些代码:
public class Pizza {
private PizzaBase base;
private ArrayList<PizzaToppings> topList;
public Pizza(PizzaBase b){
this.setBase(b);
this.topList = new ArrayList<PizzaToppings>();
}
public void setBase(PizzaBase b){
base = b;
}
public void addTop(PizzaToppings topping){
topList.add(topping);
}
public double pizzaCost(){
double cost = base.getcost();
for(PizzaToppings topping : topList)
{
cost += topping.getTopCost();
}
return cost;
}
public void OrderSummary()
{
System.out.println(base.getBase() + ": \t" + base.getcost());
for(PizzaToppings topping : topList)
{
System.out.println(topping.getTopName() + ": " + topping.getTopCost());
}
System.out.println();
System.out.println("total: "+ pizzaCost());
}
}
public class PizzaBase {
private String baseName;
private double cost;
public PizzaBase(String base, double cost) {
this.baseName = base;
this.cost = cost;
}
public String getBase() {
return baseName;
}
public double getcost() {
return cost;
}
}
最佳答案
Pizza 类可以使用其他方法扩展 PizzaBase 类,例如 addTopping()。名称中有一个暗示 - PizzaBase 可以被视为基类。
在现实生活中,我不会在这里使用继承。我有一个 Pizza 类,它是用 PizzaBase 和一些配料构建的(即基本上你所做的)。
我将 PizzaToppings 重命名为 PizzaTopping,因为它只代表一种配料。对于素食者检查,您需要每种配料才能知道它是否适合素食者。然后在 Pizza 中,您可以迭代所有配料,如果有任何配料不合适,则返回 false;如果所有配料都合适,则返回 true。
更多风格提示:
将 PizzaCost() 重命名为 cost() - 它位于 Pizza 类中,因此我们知道它是 Pizza 的成本。 getTopCost() 也是如此。可以用 cost() 代替。
将您的字段声明为 List<> 而不是 ArrayList<>(您仍然需要构造一个 ArrayList,但字段类型不需要那么具体)
将topList重命名为toppings
将左大括号放在之前的行的末尾,而不是新行。这是最广泛采用的 Java 编码约定。
不要将方法大写(例如 OrderSummary 应为 orderSummary)。在该方法中,我将返回一个字符串,而不是打印到标准输出。如果需要的话,将其留给调用者打印。
对方法使用驼峰式命名法(例如 getcost 应该是 getCost 甚至更好:cost())。
如果你扩展 PizzaBase...
public class Pizza extends PizzaBase {
// ...
public double cost() {
double cost = super.cost();
for (PizzaTopping topping: toppings) {
cost += topping.cost();
}
return cost;
}
}
我不会像雅顿建议的那样费心预先计算成本。在我看来,这将是不成熟的优化,并且只有在调用者不断调用 cost() 时才能节省周期。
我会小心使用 double 来表示财务金额。请改用 BigDecimal 以避免舍入错误。另外,这是成本还是价格?用词需要非常准确。
关于java - 对象和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20563790/