java - 构造函数未定义问题

标签 java constructor undefined

我目前正在编写一个程序,该程序应该读取文本文件,创建不同类型员工的数组(每个员工都有自己的子类),然后以不同的格式打印出信息。我认为我已经完成了大部分工作,但是每当我尝试实际创建对象时(至少我认为这就是它是什么?),我收到“构造函数未定义”错误。这 7 个物体都发生了这种情况。我将简单地在这里发布一个(及其子类),这样你们就不会被过多的信息淹没,并希望我能从中找出其余的内容。

感谢您提供的任何帮助!

我正在读取和创建对象的驱动程序类(不包括此后的其余代码) “Emp[0]”行发生错误

import java.io.File;
import java.util.Scanner;
public class PayrollSystemTest2 {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        Scanner input;
        input =  new Scanner(new File("EmployeePayrollInfo.txt"));
        Employee[] Emp = new Employee[20];

        while(input.hasNext())
        {
            String ID = input.nextLine();

            if (ID.charAt(0) == 'S')
            {
                String first = input.nextLine();
                String last = input.nextLine();
                String ssn = input.nextLine();
                Date DayOfBirth = new Date(input.nextInt(),input.nextInt(),input.nextInt());
                double salary = input.nextDouble();
                Emp[0] = new SalariedEmployee(first, last, ssn, DayOfBirth, ID);
            }

SalariedEmployee 子类

    public class SalariedEmployee extends Employee
{
    private double weeklySalary;

    // four-argument constructor
    public SalariedEmployee( String first, String last, String ssn, Date DayOfBirth, String ID,
      double salary )
   {
      super( first, last, ssn, DayOfBirth, ID); // pass to Employee constructor

      setWeeklySalary( salary ); // validate and store salary
   } // end four-argument SalariedEmployee constructor

   // set salary
   public void setWeeklySalary( double salary )
   {
      double baseSalary;
    if ( salary >= 0.0 )
         baseSalary = salary;
      else
         throw new IllegalArgumentException(
            "Weekly salary must be >= 0.0" );
   } // end method setWeeklySalary

   // return salary
   public double getWeeklySalary()
   {
      return weeklySalary;
   } // end method getWeeklySalary

   // calculate earnings; override abstract method earnings in Employee
   @Override                                                           
   public double earnings()                                            
   {                                                                   
      return getWeeklySalary();                                        
   } // end method earnings                                            

   // return String representation of SalariedEmployee object   
   @Override                                                    
   public String toString()                                     
   {                                                            
      return String.format( "salaried employee: %s\n%s: $%,.2f",
         super.toString(), "weekly salary", getWeeklySalary() );
   } // end method toString                                     
} // end class SalariedEmployee

再次感谢您提供的任何帮助。

最佳答案

嗯,是的 - 看看你的构造函数,包括明显不准确的注释:

// four-argument constructor
public SalariedEmployee(String first, String last, String ssn, Date DayOfBirth,
                        String ID, double salary)

注意有 6 个参数。现在,您尝试如何调用它:

Emp[0] = new SalariedEmployee(first, last, ssn, DayOfBirth, ID);

您正在传递 5 个参数。工资怎么了?

作为旁注:

  • Java 变量通常采用驼峰命名法 - 因此 dayOfBirthid 而不是 DayOfBirthID
  • 使用 double 表示工资等财务值是一个坏主意。使用 BigDecimal 或保留整数分。 (假设您甚至需要它精确到一分......)

关于java - 构造函数未定义问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20086873/

相关文章:

c - 对看起来不错的函数的 undefined reference

java - 无法在 eclipse 4 中使用@Inject

java - 如何简化基于先前过滤结果的流搜索?

Java 将 BufferedReader、DataOutputStream 和 Sockets 传递给可运行线程类会导致写入流时出现套接字异常

jquery - 为什么在这种情况下变量未定义?

javascript - undefined variable 作为函数参数 javascript

java - 如何在 Java 中实现自定义本地 DNS 服务?

java - wildfly 10.0、jax-ws 和有状态 session

java - 我不明白私有(private)构造函数如何不能在外部创建实例并阻止子类化(当他这样做时!)

c++ - 最深类继承中的构造函数参数太多?