好的,所以我正在从一个名为MonthlyReports的类中的客户文件中读取一堆信息。我还有一个名为Customer的类,想要覆盖一个名为getTotalFees的方法,我有两个名为StandardCustomer和PreferredCustomer的子类,我想要覆盖getTotalFees。读入的重要信息之一是客户是首选还是标准(存储在变量标志中,但我的问题是我不知道应该在何处/如何决定客户是否是标准的或者首选。
这是我的想法,在Customer类中我有抽象方法getTotalFees
public double abstract getTotalFees() {
return this.totalFees;
}
然后在我的标准和首选类中,我有覆盖它的方法
public double getTotalFees() {
if (flag.equals("S"){
return this.totalFees * 5;
} else {
return this.totalFees;
}
}
我真的只是抓住稻草,所以任何帮助都会受到赞赏。
答案 0 :(得分:4)
如果您已经有两个不同的班级StandardCustomer
和PreferredCustomer
,则可以使用该方法的两个不同版本:
//in StandardCustomer:
@Override
public double getTotalFees() {
return this.totalFees * 5;
}
//in PreferredCustomer:
@Override
public double getTotalFees() {
return this.totalFees;
}
Java中的动态分派负责根据实例的运行时类型使用正确的方法。
答案 1 :(得分:1)
听起来你需要一个工厂方法(又名“虚拟构造函数”)。让多态解决这个问题。这是面向对象编程的标志之一:
public class StandardCustomer extends Customer {
// There's more - you fill in the blanks
public double getTotalFees() { return 5.0*this.totalFees; }
}
public class PreferredCustomer extends Customer {
// There's more - you fill in the blanks
public double getTotalFees() { return this.totalFees; }
}
public class CustomerFactory {
public Customer create(String type) {
if ("preferred".equals(type.toLowerCase()) {
return new PreferredCustomer();
} else {
return new StandardCustomer();
}
}
}