无法添加子类 - 必需参数

时间:2013-01-31 10:53:16

标签: java subclass

我正在尝试扩展我的策略类,它采用双倍值。 我尝试通过

扩展它
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);
        }        
     }

3 个答案:

答案 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);}
}