假设我们想模拟不同种类的食物:披萨和馅饼。披萨和馅饼都有一种配料,但它们的配料不同。
我们实现一个抽象类Baked
,以及两个具体类Pizza
和Pie
。我们还实现一个抽象类Topping
,以及两个具体类PizzaTopping
和PieTopping
。
根据定义, 的任何具体实现都Baked
必须具有Topping
,因此Baked
应具有 类型的属性Topping
。此外,此特定的 topping 属性应为PizzaTopping
中的类型Pizza
,并且PieTopping
中的类型Pie
。
如果我正确理解了前面的答案,那么在这种情况下 LSP 就会被违反,因为如果我们抛开抽象的事实Baked
,就有可能实例化Baked
持有 的 a ,但如果我们用PieTopping
替换,这是不可能的。Baked
Pizza
我的问题是:有没有办法在不违反 LSP 的情况下实现这个模型?