0

我正在尝试扩展我的策略类,它需要一个 double 值。我尝试通过

public class DepreciablePolicy extends Policy {    

}

但我收到一个错误,“类策略中的策略不能应用于给定类型;必需:双精度,没有发现争论”。我想知道如何解决这个问题?当我使我的 Policy 无效时,extend 语句是有效的,但是如果它是无效的,那么 Policy 方法将不起作用。

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 回答