Java构造函数调用出错

时间:2016-03-25 23:00:04

标签: java

List<Object> allEmployees = new ArrayList<Object>();
 allEmployees.add(new SalariedEmployee());
 Object SalariedEmployee = allEmployees.get(0);
 allEmployees.add(new HourlyEmployee());
 Object HourlyEmployee = allEmployees.get(1);

错误说:

  类SalariedEmployee中的构造函数SalariedEmployee无法应用于给定类型; required:java.lang.String,java.lang.String,int;找不到论点;原因:实际和正式的参数列表长度不同。

SalariedEmployee类中的代码是:

SalariedEmployee (String name, String afm, int salary){
    super (name,afm);
    this.name = name;
    this.afm = afm;
    this.salary = salary;
}

这里的业余程序员,也是社区中的新人。提前谢谢!

3 个答案:

答案 0 :(得分:1)

SalariedEmployee需要构造函数参数,例如:

List<Object> allEmployees = new ArrayList<Object>();
allEmployees.add(new SalariedEmployee("someName", "AFM", 2000));
Object SalariedEmployee = allEmployees.get(0);
allEmployees.add(new HourlyEmployee(40, 20, "someOtherName", "AFM2"));
Object HourlyEmployee = allEmployees.get(1);

答案 1 :(得分:1)

如果在类中未指定其他constructor,则Java编译器提供默认(无参数)constructor。但是,如果类包含任何构造函数(在我们的示例中类似于SalariedEmployee),那么,如果您计划使用该实例化实例化类,则还需要指定无参数构造函数。

在您的示例中,指定了3个参数constructor,因此未提供参数constructor。当我们尝试创建没有参数constructor的对象时,它会显示错误。要修复它,我们需要在类中添加无参数constructor,例如:

public SalariedEmployee(){
}

答案 2 :(得分:0)

SalariedEmployee需要实例化三个参数。没有它,没有其他构造函数,代码肯定不会编译。

如果您正在使用IDE,您应该能够非常轻松地获得可能的构造函数。

上,在写new SalariedEmployee之后按 CTRL + 空格键以获取可能的构造函数的视图。如果只有一个可用,会自动生成部分代码。