我正在尝试了解更多有关类设计的知识,但遇到了困境。假设我有一个包含三个抽象概念的在线拍卖:销售、卖方和买方。一次销售有卖方和买方。卖方和买方都有相似的字段集,例如姓名、电话号码和地址,因此将它们分组成一个类是有意义的,Person 说。然后,我们可以将代码集中到抽象 Person 类中的字段和访问器,并为教师和学生指定特定类型。
这可能会导致如下代码:
class Sale {
Person teacher;
Person student;
String description;
int hourlyRate;
// Some lesson methods
}
abstract class Person {
private String name;
private String address;
private String telephoneNumber;
// Getters & setters...
}
class Seller extends Person {
// Some teacher stuff
}
class Buyer extends Person {
// Some student stuff
}
现在,应用程序需要包含 B2B 客户,但由于 Seller 和 Buyers 属于 Person 类型,因此它们不适合我们的类层次结构。如果我们使用界面,这种情况可以避免,但我们需要复制不同的联系人字段。
摆脱这种情况的最佳方法是什么?
最佳答案
考虑通过组合而不是继承来扩展。在执行此操作时,您可以使用抽象类和接口(interface),其中卖方和买方包含由接口(interface)定义的某种代理,并且您的个人抽象类也实现了该接口(interface),并且抽象业务客户端也实现了该接口(interface)。
例如
// both buyer and seller
class BusinessEntity {
// an interface that can be a person, or a business
private Agent agent;
然后是 Person 类...
abstract class Person implements Agent {
}
和商务舱
abstract class Business implements Agent {
}
并考虑进行设置,以便可以轻松地使用依赖项注入(inject)来更改 BusinessEntity 持有的代理
关于java - 抽象方法与继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20276006/