有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何修复“无法应用于”错误?

我是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;
}

以及子类专员雇员:

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

这到底意味着什么,是什么原因造成的,我该如何修复它


共 (1) 个答案

  1. # 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() {}