gpt4 book ai didi

solid-principles - 什么是被拒绝的遗赠?

转载 作者:行者123 更新时间:2023-12-04 01:44:23 26 4
gpt4 key购买 nike

有人可以解释一下 是做什么的吗?拒绝遗赠 方法?
我尝试阅读一些文章并说它是一种代码异味,或者在 wiki 中它说它是一个类,它覆盖了基类的方法,使得派生类不遵守基类的契约。

但简而言之,或者更简单地说,它实际上是什么?

最佳答案

我想你明白了。 拒绝遗赠 是代码异味。但是,什么类型的代码气味?引用 Martin Fowler 的书 Refactoring: improving the design of existing code :

Subclasses get to inherit the methods and data of their parents. But what if they don't want or need what they are given? They are given all these great gifts and pick just a few to play with.



您有一个继承自父类的子类,但子类不需要父类提供的所有行为。因此,子类拒绝父类的某些行为(遗赠)。这就是为什么这是代码异味。

更新回答@catzilla 的评论:

如果你没有机会阅读这本书(我完全推荐它),至少你有 SourceMaking page这很好地描述了它。

关于代码示例,让我们尝试一下。假设我们有一些类来计算一个人的税收。我们可以有一个计算政府税收的类:
class Government {
protected double computeBaseTax() { //... }

protected double addPersonalTax(double tax) { //... }

public double getTax() {
double tax = computeBaseTax();
return addPersonalTax(tax);
}
}

然后,我们可以有一个类来计算公司必须作为税收支付的金额。无论出于何种原因,我们意识到这个类可以重用 addPersonalTax方法,但不是 computeBaseTax() .做出错误的决定,我们决定我们的 Company类将从 Government 继承.
class Company extends Government {
private double computeInitialTax() { //... }

@Override
public double getTax() {
double tax = computeInitialTax();
return addPersonalTax(tax);
}
}

好的,这个问题可以用更好的方式解决(覆盖 computeBaseTax() 方法),但我试图说明 拒绝遗赠 是当我们从基类继承并且提供的某些功能被拒绝时发生的代码异味。

关于solid-principles - 什么是被拒绝的遗赠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28271150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com