Java 通过添加更多逻辑来打破Liskov替换原理

Java 通过添加更多逻辑来打破Liskov替换原理,java,oop,liskov-substitution-principle,Java,Oop,Liskov Substitution Principle,我有一个类:用户和客户。用户有基本的getter、setter,用于名称、电子邮件和客户需要的东西,但客户有类似getOrders()的方法,这是类用户的其他子类所没有的,比如ProjectManager。这是否意味着客户不应该扩展用户并拥有自己的名字、姓氏、电子邮件。。。属性 或者类Customer可以扩展类用户并通过订单方法和与客户相关的方法扩展逻辑吗 或者类客户可以扩展类用户吗 是的,这正是它应该做的。这个原则告诉我们,客户(或用户的任何其他子类)必须能够在任何需要用户的地方使用。同样的情

我有一个类:用户和客户。用户有基本的getter、setter,用于名称、电子邮件和客户需要的东西,但客户有类似
getOrders()
的方法,这是类用户的其他子类所没有的,比如ProjectManager。这是否意味着客户不应该扩展用户并拥有自己的名字、姓氏、电子邮件。。。属性

或者类Customer可以扩展类用户并通过订单方法和与客户相关的方法扩展逻辑吗

或者类客户可以扩展类用户吗


是的,这正是它应该做的。这个原则告诉我们,客户(或用户的任何其他子类)必须能够在任何需要用户的地方使用。同样的情况不需要以另一种方式发生,子类也不需要相互替换。

您应该问的问题是从面向对象的角度来看,这有意义吗? 客户是用户,还是有时客户不是用户?还是所有用户都是客户? 首先从逻辑的角度考虑你的对象模型。不要试图通过铺设逻辑上不存在的连接来人为地变得聪明

我不知道你在哪个领域使用这个。用户可能使用您的产品,客户可能是向您购买产品并向用户提供产品的实体。如果是这样的话,就没有is-A关系,只有HAS-A关系。所以他们不应该继承遗产。 相当多的字段随后被复制,这一事实是“好的”。您可以通过拥有一个
Person
类来解决这个问题,这两个类都继承了问题是“这意味着客户不应该扩展User…还是类客户可以扩展类User…?”简单地说,“扩展还是不扩展”。你回答“是的”。什么选择?我建议你改进你的答案。