Java继承

Java继承,java,inheritance,Java,Inheritance,我试图更好地理解继承,但我似乎无法让它发挥作用。我正在为比萨饼创建一个基础对象。底锅底、深锅或薄锅。我有两个班,比萨饼,比萨饼基地。我将私有变量保存在Pizza中,并在构建pizzabase时尝试调用它们。这是我的两门课。但它不起作用。我得到消息setCost(double)对于Pizza类型是未定义的您的代码在各个方面都是错误的 听一下编译器:如果它说你不能在Pizza上调用setCost(),因为没有这样的方法,那就意味着你没有定义它 你应该做得更像这样: public class Pizz

我试图更好地理解继承,但我似乎无法让它发挥作用。我正在为比萨饼创建一个基础对象。底锅底、深锅或薄锅。我有两个班,比萨饼,比萨饼基地。我将私有变量保存在Pizza中,并在构建pizzabase时尝试调用它们。这是我的两门课。但它不起作用。我得到消息setCost(double)对于Pizza类型是未定义的

您的代码在各个方面都是错误的

听一下编译器:如果它说你不能在
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上下文中不需要,但它清楚地表明它正在返回成员实例。