我仍然试图理解LSP。据我了解,到目前为止,子类/子类型应该能够替代Baseclass/Main类型,程序应该完好无损地工作。Liskov替代原则 - 我在这里违反了吗?
我有以下...
abstract class Warehouse<T> {
private StockLoader<T> loader;
private List<T> stock;
protected setStockLoader(StockLoader loader) {
this.loader = loader;
}
protected List<T> getStock() {
return stock;
}
public void load() {
stock = loader.load();
}
abstract showStock();
}
class WheatWH extends Warehouse<Wheat> {
@Override
public void showStock() {
// Print stocck with getStock() returns Wheat;
}
}
class RiceWH extends Warehouse<Rice> {
@Override
public void showStock() {
// Print stocck with getStock() returns Rice;
}
}
interface List<T> StockLoader<T>() {
public List<T> load();
}
class PlainStockLoader implements StockLoader<Wheat>{
public List<Wheat> load() {
//Code
}
}
class Rice {
.....
}
class Wheat {
....
}
是否违反LSP?如果没有,那么会在上面的progream中违反LSP? 此外,这是否违反任何其他原则?这可以通过其他方式进行改进吗?
'public void showStock(){//打印stocck与getStock()返回小麦; }一个无效的方法不能“返回小麦”。此外,告诉我们为什么您认为此代码违反了LSP很重要。 –
我看不到任何违规的LSP。你认为它的哪个方面可能是违规行为? –
“仓库”是抽象的吗?当类已经是通用类时,为每种不同内容类型创建子类似乎过多。 –