首页 > 解决方案 > 类中的构造函数不能用于给出类型

问题描述

我正在尝试创建多个继承自同一个超类的类。我的第一堂课效果很好。当我尝试第二个时,我收到一条我以前从未见过的错误消息。我是新手,所以我不确定如何解决这个问题。

这是课

class Employee extends Person{
      double salary;
      private java.util.Date dateCreated;


      public Employee(){
      }

      public Employee(String name, String address, String phone_number, double salary){
         super(name, address, phone_number);
         this.salary = salary;
      }

      public String getDate(){
         java.util.Date date = new java.util.Date();
         return date.toString();
      }

      public double getSalary(){
         return this.salary;
      }

      public String toString(){
         return("Employee object:\n" + super.toString() + "\n" + "Salary:\t$" + getSalary() + "\n" + "Date Hired: " + getDate());
      }
   }

我正在尝试以这种方式调用该方法

Employee employee = new Employee (name, address, number, salary);
System.out.println(employee.toString());

我收到此错误消息:

testPerson.java:21: error: constructor Employee in class Employee cannot be applied to given types;
Employee employee = new Employee (name, address, number, salary);
                    ^
  required: no arguments
  found: String,String,String,double
  reason: actual and formal argument lists differ in length
1 error

这是 TestPerson 类

public class TestPerson{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.println("Please enter your name: ");
        String name = input.next();
        System.out.println("Please enter your address: ");
        String address = input.next();
        System.out.println("Please enter your phone number: ");
        String number = input.next();
        System.out.println("Please enter your yearly salary: ");
        double salary = input.nextDouble();
        Employee employee = new Employee (name, address, number, salary);
        System.out.println(employee.toString());
    }
}

这是清除它的父类。我可能做错了我没有注意到的事情。

import java.util.*;
public class Person{
   private String name;
   private String address;
   private String phone_number;

   public Person(){
   }

   public Person(String name, String address, String phone_number){
      this.name = name;
      this.address = address;
      this.phone_number = phone_number;
   }

   public String getName(){
      return this.name;
   }

   public String getAddress(){
      return this.address;
   }

   public String getPhone(){
      return this.phone_number;
   }

   public String toString(){
      return ("Person object:\n" + "Name:\t\t" + getName() + "\n" + "Address:\t" + getAddress() + "\n" + "Phone#:\t" + getPhone());
   }

}

标签: javainheritancemethodsconstructorextends

解决方案


我从一开始就关注这个问题的状态,我发现它真的很有趣,所以我复制了你的代码并在本地测试它并像我期待的那样感到惊讶......没有发现任何错误。似乎您的编译器正在尝试使用不带参数的构造函数,而不是您提供的第二个构造函数。如果这确实是 testPerson.java 中使用的这个 Employee 类,您应该验证您的代码。


推荐阅读