gpt4 book ai didi

java - 里氏替换原则 - 我在这里违反了它吗?

转载 作者:行者123 更新时间:2023-12-01 10:09:28 25 4
gpt4 key购买 nike

我仍在尝试理解 LSP。据我所知,到目前为止,子类/子类型应该能够替代基类/主类型,并且程序应该完好无损。

我有以下内容...

  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?除此之外,这是否违反了其他原则?可以通过其他方式改进吗?

最佳答案

你所拥有的看起来非常好。这里的目标是拥有一个实现,以便您可以执行以下操作:

Warehouse<Wheat> wheat = new WheatWH();
Warehouse<Rice> rice = new RiceWH();

然后能够从 wheatriceWarehouse 类中调用方法,无论它们是哪个子类。到目前为止,您的代码完美地做到了这一点,所以我想说您绝对走在正确的轨道上。

关于java - 里氏替换原则 - 我在这里违反了它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36226815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com