Я все еще пытаюсь понять LSP. Из того, что я понимаю до сих пор, подклассы/подтипы должны иметь возможность заменить тип Baseclass/Main, и программа должна работать без изменений.Лисков Замена Принцип - Я нарушаю его здесь?
я следующее ...
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? Если нет, то что нарушит LSP в вышеупомянутом проекте? Кроме того, это нарушает любой другой принцип? Можно ли это улучшить каким-либо другим способом?
'public void showStock() {// Печать stocck с помощью getStock() возвращает Wheat; } 'метод void не может« вернуть Wheat ». Кроме того, важно сказать нам, почему вы считаете, что этот код нарушает LSP. –
Я не вижу никаких нарушений LSP. Какой аспект этого, по вашему мнению, может быть нарушением? –
Есть ли причина, почему 'Склад' является абстрактным? Создание подкласса для каждого типа содержимого кажется чрезмерным, когда класс уже является общим. –