2

さて、MonthlyReportsというクラスの顧客に関するファイルからたくさんの情報を読んでいます。また、Customerというクラスがあり、その中にgetTotalFeesというメソッドをオーバーライドしたいのですが、getTotalFeesをオーバーライドしたいStandardCustomerとPreferredCustomerという2つのサブクラスクラスがあります。読み込まれる重要な情報の1つは、顧客が優先されるか標準であるかです(これは変数フラグに格納されますが、私の問題は、顧客が標準であるかどうかをどこで/どのように判断する必要があるかわからないことです。または優先。

これが私のアイデアでした。Customerクラスには抽象メソッドgetTotalFeesがあります

public double abstract getTotalFees() {
    return this.totalFees;
}

次に、標準クラスと優先クラスに、それをオーバーライドするメソッドがあります。

public double getTotalFees() {
    if (flag.equals("S"){
         return this.totalFees * 5;
    } else {
         return this.totalFees;
    }
}

私は本当にここでストローを握っているだけなので、助けていただければ幸いです。

4

2 に答える 2

4

すでに2つの異なるクラスがStandardCustomerありPreferredCustomer、メソッドの2つの異なるバージョンを持つことができる場合:

//in StandardCustomer: 
@Override
public double getTotalFees() {
     return this.totalFees * 5;
}

//in PreferredCustomer: 
@Override
public double getTotalFees() {
     return this.totalFees;
}

Javaの動的ディスパッチは、インスタンスの実行時タイプに応じて適切なメソッドが関与するように注意します。

于 2012-09-28T00:22:05.293 に答える
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();
        }
    }
}
于 2012-09-28T00:23:43.233 に答える