Java 抽象方法与继承
我试图学习更多关于课堂设计的知识,但我遇到了一个两难的境地。假设我有一个网上拍卖,有三个抽象概念:销售、卖家和买家。Person说,销售有卖方和买方。卖方和买方都有类似的字段集,如姓名、电话号码和地址,将它们归为一个类是有意义的。然后,我们可以集中代码,用于抽象人员类中的字段和访问器,并为教师和学生指定特定类型 这可能导致以下代码:Java 抽象方法与继承,java,oop,Java,Oop,我试图学习更多关于课堂设计的知识,但我遇到了一个两难的境地。假设我有一个网上拍卖,有三个抽象概念:销售、卖家和买家。Person说,销售有卖方和买方。卖方和买方都有类似的字段集,如姓名、电话号码和地址,将它们归为一个类是有意义的。然后,我们可以集中代码,用于抽象人员类中的字段和访问器,并为教师和学生指定特定类型 这可能导致以下代码: class Sale { Person teacher; Person student; String description;
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
}
现在,应用程序需要合并企业对企业客户,但因为卖家和买家都是Person类型的,所以它们不适合我们的类层次结构。如果我们使用接口,这是可以避免的,但我们需要复制不同的联系人字段
摆脱这种情况的最佳方法是什么?将Person重命名为
NaturalPerson
,并从BusinessObject
或任何适合您管辖范围的名称派生出来。然后,您可以从那里派生出Person
和Business
。将Person重命名为NaturalPerson
,并从BusinessObject
或任何适合您管辖范围的名称派生。然后,您可以从中派生出Person
和Business
。考虑通过组合而不是继承进行扩展。在此过程中,您可以同时使用抽象类和接口,其中卖家和买家都包含由接口定义的某种代理,并且让您的person抽象类实现接口,也让抽象业务客户端实现接口
比如说
// both buyer and seller
class BusinessEntity {
// an interface that can be a person, or a business
private Agent agent;
然后这个人班
abstract class Person implements Agent {
}
商务舱呢
abstract class Business implements Agent {
}
并考虑将事情设置为便于使用依赖注入来更改业务实体持有的代理< /p> 考虑通过构造函数而不是继承来扩展。在此过程中,您可以同时使用抽象类和接口,其中卖家和买家都包含由接口定义的某种代理,并且让您的person抽象类实现接口,也让抽象业务客户端实现接口
比如说// both buyer and seller
class BusinessEntity {
// an interface that can be a person, or a business
private Agent agent;
然后这个人班
abstract class Person implements Agent {
}
商务舱呢
abstract class Business implements Agent {
}
并考虑将事情设置为便于使用依赖注入来更改业务实体持有的代理< /p> 考虑使用对您的业务不适当部分的联系人字段,而不是共享工具的组合继承。例如:
class Identity {
private String name;
private String address;
private String telephoneNumber;
// Getters & setters...
// behaviours
}
class Seller {
private Identity identity;
// Getters & Setters
// behaviours
}
class Buyer {
private Identity identity;
// Getters & Setters
// behaviours
}
因此,您可以通过买方和卖方类共享与身份联系信息相关的行为,同时保持您的类型层次结构真正重要的业务相关功能考虑对您的联系人字段使用组合而不是继承,这些字段不是您业务的一部分,而是一个共享工具。例如:
class Identity {
private String name;
private String address;
private String telephoneNumber;
// Getters & setters...
// behaviours
}
class Seller {
private Identity identity;
// Getters & Setters
// behaviours
}
class Buyer {
private Identity identity;
// Getters & Setters
// behaviours
}
因此,您可以通过买方和卖方类共享与身份联系信息相关的行为,同时将类型层次结构保留为真正重要的业务相关功能考虑通过组合而不是继承进行扩展。在这样做的过程中,您可以使用抽象类和接口,其中卖方和买方包含由接口定义的某种代理,而让你的抽象类实现界面也有抽象的业务客户端实现接口。@ HovercraftFullOfEels能提供一个例子吗?一个重要的问题是,一个人是否既是卖方又是买方?考虑通过扩展而不是继承来扩展。在这样做的过程中,您可以使用抽象类和接口,其中卖方和买方包含由接口定义的某种代理,让您的person抽象类实现接口,也让抽象业务客户机实现接口。@HoverCraftfullOfels您能提供一个例子吗?需要问的一个重要问题是,一个人可以既是卖家又是买家吗?