For example I have Currency, and Exchange which deals with various implementations of Currency. I want to have an extra rate for curtain currencies, I do it like so
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;
}
}
Is LSP violated here?