我正在尝试扩展我的策略类,它采用双倍值。 我尝试通过
扩展它public class DepreciablePolicy extends Policy {
}
但是我收到一个错误,“类策略中的策略不能应用于给定的类型;必需:double,找不到争论”。我想知道如何解决这个问题?当我使我的策略无效时,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);
}
}
答案 0 :(得分: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
中没有无参数构造函数。
答案 1 :(得分:0)
由于您的Policy
类没有定义no-args默认构造函数,您必须从DepreciablePolicy
构造函数显式调用超类的构造函数。
public class DepreciablePolicy extends Policy {
public DepreciablePolicy(double d){
super(d)
}
}
答案 2 :(得分: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);}
}