java - 如何在调用 super 时简化这个数学运算?

标签 java oop inheritance super

我正在尝试做一个项目,模拟一家销售各种甜点的杂货店。目前,我正在尝试为分层蛋糕创建一个类,该类派生自蛋糕类,而蛋糕类本身又派生自抽象甜点类。本质上,蛋糕类的构造函数有两个参数:名称和价格。分层蛋糕的价格为底层价格+顶层价格+总价的10%。我找到了一种方法来做到这一点,但这是一行非常长且难看的代码。我已经尝试了几种方法来尝试使用变量来简化它,但我似乎无法找到一种方法来适应它是在 super() 中完成的事实。有什么办法可以让它变得更简单、更高效吗?提前致谢!

这是代码:

public class TieredCake extends Cake {
    private Cake base;
    private Cake top;

    public TieredCake (Cake base, Cake top) {
        super(base.getName() + " with an upper tier of " + top.getName(), (base.getPrice() + top.getPrice()) * 0.10 + base.getPrice()+top.getPrice());
        this.base = base;
        this.top = top;
    }

    public Cake getBase() {
        return base;
    }

    public Cake getTop() {
        return top;
    }
}

最佳答案

将对 super 的调用拆分为多行会有所帮助:

public TieredCake(Cake base, Cake top) {
    super(
        base.getName() + " with an upper tier of " + top.getName(),
        (base.getPrice() + top.getPrice()) * 0.10 + base.getPrice() + top.getPrice()
    );

    this.base = base;
    this.top = top;
}

但更重要的是,让我们看一下这个公式。我们可以在数学层面上进行一些简化:

B := base.getPrice()
T := top.getPrice()

(B + T) * 0.1 + B + T
= (B * 0.1) + (T * 0.1) + B + T
= (B * 1.1) + (T * 1.1)
= (B + T) * 1.1

这给了我们:

public TieredCake(Cake base, Cake top) {
    super(
        base.getName() + " with an upper tier of " + top.getName(),
        (base.getPrice() + top.getPrice()) * 1.1
    );

    this.base = base;
    this.top = top;
}

关于java - 如何在调用 super 时简化这个数学运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54583393/

相关文章:

java - 隐藏显示 jframe 上的单选按钮

java - 删除特定对象在 Java ArrayList 中不起作用

java - 如何在不重复代码的情况下编写子类构造函数?

python-3.x - 继承和 Pandas

java - jquery/Angular 调度器实现

java - 如何使用 Jackson ObjectMapper 检测尾随垃圾

Android 菜单代码位于单独的类文件中

javascript - 在文字对象上使用 Object.create 的奇怪行为和多个实例

c++ - 处理 "database"个实例的模式

python - 如何在父@classmethod 中引用子类