例如,我有 Currency
和处理 Currency
各种实现的 Exchange
。我想对窗帘货币有额外的汇率,我这样做
interface Currency { double rate();}
interface Exchange { double convert(Currency currency, double money); }
class PrivateBank implements Exchange {
@Override
public double convert(Currency currency, double money) {
double extra_rate = 1.0;
if (currency instanceof CanadaDollar) { /// ?
extra_rate = 1.05;
}
return money * currency.rate() * extra_rate;
}
}
这里是否违反了LSP?
最佳答案
没有。 Liskov 替换原则是关于子类型忠实地展示其父类(super class)型的所有属性。它绝不禁止其他代码以不同方式处理同一类型的不同子类型。
您的示例代码有点臭,但不是因为与 LSP 有任何冲突。
关于java - `instanceof` 运算符是否违反里氏替换原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62602914/