java - 抽象方法与继承

标签 java oop

我正在尝试了解更多有关类设计的知识,但遇到了困境。假设我有一个包含三个抽象概念的在线拍卖:销售、卖方和买方。一次销售有卖方和买方。卖方和买方都有相似的字段集,例如姓名、电话号码和地址,因此将它们分组成一个类是有意义的,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/

相关文章:

c++ - 从 QGraphicsItem Qt C++ 获取实际对象

java - Android 找不到类 'android.app.job.JobScheduler'

c++ - 如何在C++中继承类?

php - 通过字符串调用方法?

c# - 如何使用从父接口(interface)继承的相同方法实现多个接口(interface)

python - 如何在类中移动此方法装饰器模式?

java - 使用 Linux 还是 Windows 为 iPhone 构建应用程序?

java - JTable、JComboBox 使用自定义对象

java - java包常量中类文件的数量

Java 2D 游戏 NullPointerException