1

問題は次のとおりです。

この章で説明する他の法律事務所クラスに付随するクラス Marketer を作成します。マーケティング担当者は 50,000 ドル (一般従業員よりも 10,000 ドル多い) を稼ぎ、「供給が続くうちに今すぐ行動してください!」と表示するアドバタイズという追加の方法を使用します。必要に応じて Employee スーパークラスと対話するようにしてください。

これまでのコード:

public class Marketer extends Employee {   

public Marketer() { 
        setBaseSalary(super.getSalary() + 10000.0);    
    }

    public void advertise() {
        System.out.println("Act now, while supplies last!") ;
    }
}

出力は次のようになります。

50000.0

75535.0

供給が続くうちに、今すぐ行動してください!

次のサイトには、上記のコードが従う Employee.javaというファイル拡張子があります: http://practiceit.cs.washington.edu/problem.jsp?id=1324

これまでのところ、75535.0 を除いて、予想されるすべての結果が出力されました。どこで私は間違えましたか??コードを実行すると、次のように表示されました (75535.0 パーツで受け取ったエラーについて):

(基本給を $65535.00 に変更)

私の出力は65535.0だったので、これは答えが想定されているよりも10000少ないです。

Javaでこれらの継承のようなことを始めたばかりなので、エラーを見つけることができないようです。そのため、まだ慣れていません。私がどこを台無しにしたかを理解するのを手伝ってくれてありがとう。

4

3 に答える 3

2

何が起こっているかは次のとおりです。

Employee のコンストラクタとインスタンスの初期化を呼び出す Marketer を作成します。それはbaseSalary40,000に設定されます。その後、Markerter コンストラクターのコードが実行され、baseSalary50,000 に設定されます。彼らのテスト ドライバーはsetBaseSalary65535.0 の値で呼び出し、初期セットを上書きします。

コードが Employee クラスと適切にやり取りしていません。のコメントEmployee.javaは、コードが以下の値を使用、呼び出し、または変更することを想定していないことを示しています。それらの 1 つはbaseSalary変数であり、Marketerコンストラクターで変更しています。テスト ドライバーが値を変更すると、クラスは の変更された給与を計算できなくなりMarketerます。

setBaseSalaryコンストラクターを呼び出すべきではありません。代わりに、getSalaryMarketer でオーバーライドしgetSalary、独自のクラスで Employee のメソッドを使用します。

于 2013-04-06T06:19:56.900 に答える
0

これが私の解決例です:

    public class Marketer extends Employee {
        public void advertise() {
            System.out.println("Act now, while supplies last!");
        }
        public double getSalary() {
            return super.getSalary() + 10000;
        }
    }

問題をよりよく理解するのに役立つはずです。

于 2013-04-06T06:23:00.187 に答える
0

問題の解決策は簡単です。以下のようにMarketerクラスを定義するだけです

public class Marketer extends Employee {   

    public void advertise() {
        System.out.println("Act now, while supplies last!") ;
    }

    @Override
    public double getSalary() {
        return super.getSalary() + 10000.0;               // $40,000.00
    } 
}

ここでは、Employee クラスの getSalary メソッドをオーバーライドし、給与を返さなければならないときはいつでも、従業員の給与に 10000 を加算します。

お役に立てれば

于 2013-04-06T06:32:42.247 に答える