0

私は自分のポリシークラスを拡張しようとしています。これはdouble値を取ります。で拡張してみました

public class DepreciablePolicy extends Policy {    

}

しかし、「クラスポリシーのポリシーは特定のタイプに適用できません。必須:double、引数が見つかりません」というエラーが表示されます。どうすればこれを修正できるのでしょうか。ポリシーを無効にしたとき、extendステートメントは有効でしたが、無効の場合、ポリシーメソッドは機能しません。

public class Policy {
   double amount;
   int policyNumber;
   public static int policyCount = 1;


   public Policy(double a){
    amount = a;
    policyNumber = policyCount;
    policyCount ++;
  }

    public boolean isExpired(){
        return false;
    }

    public void print(){
        System.out.print("Policy #" + this.policyNumber + " with amount $" + this.amount);
        }        
     }
4

3 に答える 3

0

Policyクラスには、をとるコンストラクターしかありませんdouble

つまり、のすべてのコンストラクターは、そのコンストラクターにDepreciablePolicy(潜在的に間接的に)チェーンする必要があります。

public DepreciablePolicy(double amount) {
    super(amount);
}

もちろん、DepreciablePolicyコンストラクターにパラメーターとして量を取得させる必要はありません。パラメーターを追加したり、他のデータからスーパークラスコンストラクター引数を派生させたりすることもできます。例えば:

public DepreciablePolicy(double amount, double charge) {
    super(amount + charge);
    // Now maybe use the parameters separately
}

あるいは:

public DepreciablePolicy() {
    super(0); // Or some other value...
}

現在、コンストラクターを指定していません。これは、コンパイラーがデフォルトのコンストラクターを作成しようとしていることを意味します。これは、次のようになります。

public DepreciablePolicy(double amount, double charge) {
    super(amount + charge);
    // Now use them separately
}

にパラメータのないコンストラクタがないため、これは失敗しますPolicy

于 2013-01-31T10:54:45.220 に答える
0

クラスには引数なしのデフォルトコンストラクターが定義されてPolicyいないため、コンストラクターからスーパークラスのコンストラクターを明示的に呼び出す必要がありますDepreciablePolicy

public class DepreciablePolicy extends Policy {    
public DepreciablePolicy(double d){
super(d)
}

}
于 2013-01-31T10:55:32.340 に答える
0

デフォルトまたはパラメーターなしのコンストラクターを持たないクラスを拡張する場合は、スーパークラスコンストラクターを明示的に呼び出す必要があります。Policy.amountそれ以外の場合、フィールド値はどのように設定できますか?

ここではどちらかを行うことができます

public class DepreciablePolicy extends Policy {    
  public DepreciablePolicy(double d) {super(d);}
}

また

public class DepreciablePolicy extends Policy {    
  public DepreciablePolicy() {super(MY_DOUBLE_CONSTANT);}
}
于 2013-01-31T10:56:28.157 に答える