有条件地重写java中的方法

时间:2012-09-28 00:19:07

标签: java conditional method-overriding

好的,所以我正在从一个名为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;
    }
}

我真的只是抓住稻草,所以任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:4)

如果您已经有两个不同的班级StandardCustomerPreferredCustomer,则可以使用该方法的两个不同版本:

//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();
        }
    }
}