2013-12-09 111 views
-5

我試圖理解繼承稍微好一點,但我似乎無法讓它工作。我正在創建一個披薩的基礎對象。底部,深鍋或薄。我有2個班,比薩餅,PizzaBase。我將私人變量保存在Pizza中,並在構建我的pizzabase時試圖調用它們。這是我的2班。但它不工作。我得到的消息setCost(雙)是不明確的類型比薩Java繼承

+6

你的問題是什麼? –

+0

對不起。它不工作。我得到的消息,setCost(雙)是未定義的類型比薩 –

+0

嗯(setCost(雙)...)實際上是正確定義的。你確定你發佈的代碼與你屏幕上的代碼相同嗎?你對繼承的使用也有點奇怪。也許你可以使用'組合'而不是繼承'比薩和比薩餅? – vikingsteve

回答

4

你的代碼在各方面都是錯誤的。

聽編譯器:如果它說你不能在Pizza上調用setCost(),因爲沒有這樣的方法,這意味着你沒有定義它。

你應該做更多的事情是這樣的:

public class Pizza { 
    private double cost; // double is NOT a good idea for money 

    public Pizza(double cost) { 
     if (cost < 0.0) throw new IllegalArgumentException("we won't pay you to take our pizza!"); 
     this.cost = cost; 
    } 

    public double getCost() { return this.cost; } 
} 

public class ThinPizza extends Pizza { 
    private static final double DEFAULT_COST = 2.0; 

    public ThinPizza() { this(DEFAULT_COST); } 
    public ThinPizza(double cost) { super(cost); } 
} 

public class ThickPizza extends Pizza { 
    private static final double DEFAULT_COST = 5.0; 

    public ThickPizza() { this(DEFAULT_COST); } 
    public ThickPizza(double cost) { super(cost); } 
} 

您可以在薄與厚比薩打電話getCost(),因爲它是-A Pizza

+1

不錯。愛IAE,哈哈! – vikingsteve

+0

謝謝 - 這是一張有效的支票,你不同意嗎?爲什麼當價值對象很聰明的時候可以忽略它? – duffymo

+0

True :) p.s,'return this.cost;' - why this.'? – vikingsteve