Java在对象中创建对象

时间:2013-12-11 17:02:25

标签: java object

我正在尝试制作披萨菜单。我有3个班级,

  • PizzaBase(使用get / set方法获取基础厚度 [薄或深的])
  • PizzaTopping,再次使用get / set方法 对于顶部类型
  • Pizza,我的成本变量存储在哪里 使用继承在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();



}

 }

2 个答案:

答案 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()方法。这适用于您的PizzaToppingPizzaBasePizza类:

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;
   }  
}