我仍然試圖理解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。你認爲它的哪個方面可能是違規行爲? –
「倉庫」是抽象的嗎?當類已經是通用類時,爲每種不同內容類型創建子類似乎過多。 –