java - 如何在子类中编写代码来恢复父类中的一些逻辑?
问题描述
我有产品对象和两个类 AsiaProductValidation 和 ProductValidation.AsiaProductValidation 在区域为亚洲时被调用。ProductValidation 是父类,它有一些可以在 AsiaProductValidation 中使用的功能。我想知道我可以在 AsiaProductValidation 中编写 validate 方法来重用在父类中编写的一些检查
class Product{
int id,
long price;
String region;
Product(int id, long price, String region){
this.id = id;
this.price = price;
this.region = region;
}
// getters for id,price and locId
}
Class ProductValidation{
public static validate(List<Product> list, int qty, int totalAvailableQty){
if(list.size() == 0)
return //some expceptio
if(qty < totalAvailableQty){
return //some exception
}
if(qty == totalAvailableQty){
calculate(list);
}
}
private long[] calculate(List<Product> list){
return list.stream().mapTolong(p -> p.getPrice()).toArrat()l
}
}
class AsiaProductValidation{
public static validate(List<Product> list, int qty, int totalAvailableQty){
// First two conditions stay same as above
if(list.size() == 0)
return //some expceptio
if(qty < totalAvailableQty){
return //some exception
}
//only calculate function changes, how can i use inheritance here to avoid writing above two
checks in this class. and also call above two checks when this class is called?
calculate(list);
}
private long[] calculate(List<Product> list){
return list.stream().mapTolong(p -> p.getPrice() < 100 ? 0 : p.getPrice()).toArray();l
}
}
class RegionCalculate{
public void call(List<Product> list, int qty, int totalAvailableQty ){
if(region == Asia){
AsiaProductValidation.validate(qty,totalAvailableQty )
}
else{
ProductValidation.validate(qty,totalAvailableQty)
}
}
}
long[] price = {40, 90, 40};
List<Product> list = new ArrayList();
list.add(new Product(1,100, "ASIA"));
list.add(new Product(1,110, "AUS));
list.add(new Product(1,90, "EUROPE"));
RegionCalculate reg = new RegionCalculate();
reg.call(list, 1100, 500);
解决方案
你想写在类扩展中。您应该将 AsiaProductValidation 用作抽象类,以便它可以轻松扩展 ProductValidation 的功能:
Class ProductValidation { //Insert Implementation }
abstract class AsiaProductValidation extends ProductValidation {
super.methodName()
//etc }
推荐阅读
- javascript - 从文本区域 javascript 中的电子邮件中提取名称
- java - 表格的 j2html 嵌套
- python - 尝试使用以下 python 代码从 azure blob 存储下载内容时出现错误:“重试策略不允许重试”
- c# - 为什么我在现实生活中需要迭代器?没有内置 C# 集合类型
- asp.net - 为什么我的 iis express 比我的 iis 7.5 快?
- javascript - 从登录页面重定向到完整注册页面时自动填充表单内容
- php - 为什么我的 PHP 循环不起作用?还是我必须添加“如果”?
- angular - 替换表达式Angular 4中的字符串
- reactjs - ReactJS 过滤 API 数据
- c - Visual Studio 2017:CL.exe 退出,代码为 -1073741515