gpt4 book ai didi

java - 对象和继承

转载 作者:太空宇宙 更新时间:2023-11-04 15:19:25 26 4
gpt4 key购买 nike

我对编程非常陌生,并且有一个任务是创建一个简单的披萨订购程序。它应该利用对象并利用继承。对于作业的第一部分,我必须创建:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com