簡體   English   中英

Java在對象內創建對象

[英]Java creating objects within objects

我正在嘗試創建一個比薩菜單。 我有3節課

  • PizzaBase(使用get / set方法來確定基底的厚度[thinpan或deeppan])
  • PizzaTopping,再次使用get / set方法設置澆頭的類型
  • 披薩,我的成本變量存儲在3個類中,並通過繼承使用。

由於成本變量用於底料,澆頭和整個比薩本身。

現在我的問題是,我將如何創建一個比薩餅對象,該比薩餅對象又創建一個基礎對象和一些澆頭對象,每個對象都有一個價格?

我可以算出如何計算整體價格,只是在對象內創建對象而已。

 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();



}

 }

用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;
 //..
}

您根本不需要繼承。 最多您可能需要一個界面。 所以我會這樣設計:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM