java - 如何在调用 super 时简化这个数学运算?
问题描述
我正在尝试做一个模拟出售各种甜点的杂货店的项目。目前,我正在尝试为分层蛋糕创建一个类,该类派生自蛋糕类,而蛋糕类本身派生自抽象甜点类。本质上,cake 类的构造函数有两个参数,name 和 price。分层蛋糕的价格为底价+顶价+总价的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;
}
推荐阅读
- git - 什么版本的 Git 支持 TLS 1.2?
- json - 反序列化来自 web 服务的 json 数据
- php - 使用标头(“位置:xxx.php”);将控制权移动/保留到网页上的选项卡
- elasticsearch - Fluentd 似乎在工作,但在 Kibana 中没有日志
- java - Hazelcast 无法对 IList 进行排序
- javascript - 如何在没有 jQuery 或 bootstrap.js javascript 的情况下打开 Bootstrap 模式?
- python - 为什么我会为 import cupy 收到 ModuleNotFoundError?
- rdbms - 分层、网络和关系数据模型之间有什么区别?
- c++ - C++ 删除了新操作符但可以创建 shared_ptr
- c++ - 再次关于 enable_if_t 中的 C++ SFINAE