【问题标题】:How do I fix "Cannot be applied to" errors? [duplicate]如何修复“无法应用于”错误? [复制]
【发布时间】:2016-01-31 02:30:14
【问题描述】:

我是 Java 的菜鸟,尤其是 Java 中的面向对象编程,我不断收到这个让我发疯的错误。

这是我的 Employee 超类的一部分:

public Employee(String firstName, String lastName, String socialSecurityNumber) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.socialSecurityNumber = socialSecurityNumber;
}
private final String firstName;
private final String lastName;
private final String socialSecurityNumber;

public String getFirstName() {
    return firstName;
}

public String getLastName() {
    return lastName;
}

public String getSocialSecurityNumber() {
    return socialSecurityNumber;
}

和子类 CommissionEmployee:

public CommissionEmployee(String firstName, String lastName, 
String socialSecurityNumber, double grossSales, 
double commissionRate)
{
  this.firstName = firstName;                                    
  this.lastName = lastName;                                    
  this.socialSecurityNumber = socialSecurityNumber;         
  this.grossSales = grossSales;
  this.commissionRate = commissionRate;
}

我得到的同样的错误是:

constructor Employee in class Employee cannot be applied to given types;
required: String,String,String
found: no arguments
reason: actual and formal argument lists differ in length

这到底是什么意思,是什么原因造成的,我该如何解决?

【问题讨论】:

    标签: java


    【解决方案1】:

    由于CommissionEmployeeEmployee 的子类,Java 要求在构造CommissionEmployee 时调用Employee 的构造函数。默认情况下,这是对无参数构造函数 Employee() 的调用,在您的情况下它不存在。

    你有两个选择:

    • 调用已经存在的超类构造函数:

      public CommissionEmployee(String firstName, String lastName, 
      String socialSecurityNumber, double grossSales, 
      double commissionRate)
      {
        super(firstName, lastName, socialSecuityNumber);  
        this.grossSales = grossSales;
        this.commissionRate = commissionRate;
      }
      
    • 创建一个无参数的超类构造函数,并在子类构造函数中设置名字/姓氏和 SSN(不太理想)。超类(Employee)的构造函数是受保护的,所以只能被子类调用,如下:

      protected Employee() {}
      

    【讨论】:

      猜你喜欢
      • 2021-04-18
      • 2018-11-18
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 2017-10-11
      • 2015-06-08
      • 2017-06-04
      • 1970-01-01
      相关资源
      最近更新 更多