java超级类应该实例化并调用其子类吗?
我有一些交易行项目,我需要从这些行项目生成未来的账单计划。目前有四种不同类型的行项目,每种类型都需要稍微不同的计费计划生成逻辑。我预计未来会有更多种类的商品
目前,我有一个BillingScheduleGenerator类,它接受行项目列表,对行项目进行排序,从数据库中检索所需的配置信息,并为每组行项目触发正确的计费计划生成逻辑
问题是这个班级正在变得庞大
我认为最好的解决方案是创建一系列子类,如下所示:
BillingScheduleGenerator
LineItemBillingScheduleGenerator extends BillingScheduleGenerator
PurchaseLineItemBillingScheduleGenerator extends LineItemBillingScheduleGenerator
CancellationLineItemBillingScheduleGenerator extends LineItemBillingScheduleGenerator
...
这样,更具体的行项目生成器可以共享更通用的行项目生成逻辑(每月按比例分配、检索定价信息等)不需要共享的特定生成逻辑可以封装在一个较小的类中
所以我现在面临的问题是:我应该把对行项目进行排序并从数据库中检索配置信息的逻辑放在哪里
它应该存在于LineItemBillingScheduleGenerator超级类中吗?这将允许调用者使用行项目列表实例化LineItemBillingScheduleGenerator,调用单个方法,并接收计费计划列表作为回报
一个超类实例化并调用其每个子类是否“错误”
我应该把排序和查询逻辑放到服务方法中吗
# 1 楼答案
一个超类可以被实例化并调用它的子类。在Java中,每个类的默认父类都是对象类。默认情况下,每个类都扩展并继承该对象类的属性。还可以阅读Upcasting and downcastingInheritance。仔细阅读这些基础知识,你会对它的工作原理有一个很好的了解