2013-12-11 135 views
0

我正嘗試創建一個Pizza菜單。我有3類,Java在對象內創建對象

  • PizzaBase(與用於基體的厚度get/set方法 [要麼薄或deeppan])
  • PizzaTopping,再次與對摘心
  • 的類型get/set方法
  • 比薩餅,我的成本變量存儲和 跨3個類使用繼承。

作爲一個成本變量是用於基地,頂部和整個披薩本身。

現在我的問題是這樣的,我將如何去創建一個比薩餅對象,反過來創建1個基礎對象和幾個澆頭對象,每個對象都有一個價格?

我可以計算出如何計算總體價格,我只是有點卡住在對象內創建對象。

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



} 

} 
+3

爲什麼'PizzaTopping'延伸'Pizza'? 「披薩」由* PizzaTopping組成; 「PizzaTopping」本身不是「比薩」。我會重新考慮對象模型。 –

+0

是因爲問這個問題我已經擺脫了繼承方面..每個類現在都有自己的成本屬性。不過,我仍然在創建對象內部的對象方面很努力 –

+1

那麼你已經有了一個對象內的對象'String topping'。這並不比這更特別。 – kviiri

回答

1

與CostableItem類更換比薩類:

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 {...} 

之後,創建一個類叫比薩有一個基地,多種澆頭:

public class Pizza{ 
private PizzaBase base; 
private ArrayList<PizzaToppings> toppings; 
//.. 
} 
+1

將'CostableItem'做成一個接口會更好。 –

+0

我也這麼認爲,只是回答他關於如何在對象內創建對象的問題。 – faisal

0

你根本不需要繼承。您最多可能需要一個界面。

public interface PricedItem { 
    double getCost(); //double is suitable for our purposes 
} 

由於要計算成本,一切,是一個定價的項目應該有一個getCost()方法:因此,我想這種方式設計它。這將適用於你的PizzaToppingPizzaBase,並且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; 
    } 
}