Java继承
我试图更好地理解继承,但我似乎无法让它发挥作用。我正在为比萨饼创建一个基础对象。底锅底、深锅或薄锅。我有两个班,比萨饼,比萨饼基地。我将私有变量保存在Pizza中,并在构建pizzabase时尝试调用它们。这是我的两门课。但它不起作用。我得到消息setCost(double)对于Pizza类型是未定义的您的代码在各个方面都是错误的 听一下编译器:如果它说你不能在Java继承,java,inheritance,Java,Inheritance,我试图更好地理解继承,但我似乎无法让它发挥作用。我正在为比萨饼创建一个基础对象。底锅底、深锅或薄锅。我有两个班,比萨饼,比萨饼基地。我将私有变量保存在Pizza中,并在构建pizzabase时尝试调用它们。这是我的两门课。但它不起作用。我得到消息setCost(double)对于Pizza类型是未定义的您的代码在各个方面都是错误的 听一下编译器:如果它说你不能在Pizza上调用setCost(),因为没有这样的方法,那就意味着你没有定义它 你应该做得更像这样: public class Pizz
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); }
}
公共级比萨饼{
私人双重成本;//双重成本不是一个好主意
公共比萨饼(双倍价格){
如果(成本<0.0)抛出新的IllegalArgumentException(“我们不会付钱让你拿我们的比萨饼!”);
成本=成本;
}
public double getCost(){返回this.cost;}
}
公共类ThinPizza扩展比萨饼{
私有静态最终双默认成本=2.0;
public ThinPizza(){this(默认成本);}
公共ThinPizza(双重成本){super(成本);}
}
公共类比萨饼{
私人静态最终双默认成本=5.0;
公共成本({this(默认成本);}
公共披萨(双倍成本){super(成本);}
}
你可以在薄厚的比萨饼上调用
getCost()
,因为它是一种比萨饼
你的问题是什么?对不起。它不起作用了。我得到的消息是,对于PizzaWell类型,setCost(double)是未定义的。实际上,它(setCost(double)…)是正确定义的。您确定您发布的代码与屏幕上的代码相同吗?你对继承的使用也有点奇怪。也许您可以对PizzaBase和PizzaBase使用composition
而不是heritation
?为什么要在PizzaBase中创建PizzaBase的实例呢?很好。爱这个世界,哈哈!谢谢-这是一张有效的支票,你不同意吗?当一个值对象可以是智能的时候,为什么要让它变得无知呢?True:)p.s,返回this.cost代码>-为什么这个。
?我在OP的代码中看到了这一点:公共无效setCost(双重成本){this.cost=cost;}
你是说这并不构成setCost方法的定义?品味和选择的问题。在getter上下文中不需要,但它清楚地表明它正在返回成员实例。