Ошибка компилятора Java: «не удается найти конструктор символа ..»? - PullRequest
0 голосов
/ 01 декабря 2010

Я пишу код для сотрудника, менеджера, почасового работника для задания класса, но я столкнулся с проблемой, которую не могу понять, ниже приведен мой код для работника, за которым следует почасовой работник.проблема в том, что почасовой работник не будет компилироваться, он выдает ошибку «не могу найти сотрудника конструктора символов», когда я пытаюсь скомпилировать (класс сотрудника компилируется без проблем. какие-либо предложения, пожалуйста? я думаю, что я смотрел на это так долго, ябольше не вижу проблемы! спасибо. pieter.

КЛАСС РАБОТНИКА -

public class Employee
{
   public String firstName;
   public String lastName;
   public double hourlyRate;
   final static double NORMAL_WORKWEEK = 37.5;

   public Employee(String firstName, String lastName, double hourlyRate)
   {
       setFirstName(firstName);
       setLastName(lastName);
       setHourlyRate(hourlyRate);
    }
    //Accessor and Mutator Methods for the employee's first name.
    public String getFirstName()
    {
        return firstName;
    }

    public void setFirstName(String firstName)
    {
        firstName = firstName;
    }
   //Accessor and Mutator Methods for the employee's last name.
     public String getLastName()
    {
        return lastName;
    }

    public void setLastName(String lastName)
    {
        lastName = lastName;
    }
    //Access and Mutator Methods for the employee's hourly rate.
    public double getHourlyRate()
    {
        return hourlyRate;
    }
    public void setHourlyRate(double hourlyRate)
    {
    //If the user input is valid, update the employee's hour rate with the newly input value.

    if(hourlyRate > 0)
    {
      hourlyRate = hourlyRate;
        }
      //Otherwise prevent an hour rate greater than zero being overwritten 
        else if(hourlyRate <=0)
        {

   if(hourlyRate <= 0)
   {           
            hourlyRate = 0;
            }

  decorateConsole();

  //Alert the user to their mistake.
  System.out.println("Error ! ! ! - An attempt to set the employee " + this.firstName + " " + this.lastName + "'s hourly rate to zero was detected.\n");

  decorateConsole();

  }


 }

 public void printState()
 {

  decorateConsole();

  System.out.println("[FIRST NAME] = " + firstName + " [LAST NAME] = " + lastName + " [HOURLY RATE] = " + hourlyRate + "\n");

  decorateConsole();

 }

 public void decorateConsole()
 {

  System.out.println("+-< EMPLOYEE INFO >-------------------------------------------------------------------------------------------------------------------------+\n");

 }

КЛАСС ЧАСОВОГО РАБОТНИКА -

public class HourlyWorker extends Employee
{
   private double wage;
   private double hours;

   public HourlyWorker(String firstName, String lastName, double hourlyWage, double hoursWorked)
   {
       super(firstName, lastName);
       this.wage = wage;
       this.hours = hours;
    }

    public void setWage (double hourlyWage)
    {
       this.wage = wage;
    }
    public void getWage()
    {
        return wage;
    }
    public void setHours (double hours)
    {
        this.hours = hours;
    }
    public double getHours()
    {
        return hours;
    }




}

Ответы [ 10 ]

9 голосов
/ 01 декабря 2010

У вас нет Employee конструктора с двумя параметрами:

super(firstName, lastName);

Попробуйте использовать:

super(firstName, lastName, 0.0);

РЕДАКТИРОВАТЬ в соответствии с запросом Тони, вот более подробное объяснение.

С super(firstName, lastName); вы вызываете (пытаетесь вызвать) конструктор в классе Employee, который имеет два строковых параметра.

Изучив определение класса Employee, мы увидим, что у вас нет такого конструктора, но у вас есть один с тремя параметрами:

public Employee(String firstName, String lastName, double hourlyRate)

Итак, решение состоит в том, чтобы вместо этого вызвать этот конструктор. Поскольку у вас нет значения по умолчанию для hourlyRate, мы можем использовать 0,0, что является двойным.

Другой альтернативой будет создание двухпараметрического конструктора в Employee классе

public Employee(String firstName, String lastName )
4 голосов
/ 01 декабря 2010

В конструкторе HourlyWorker вы пытались вызвать конструктор Employee следующим образом:

super(firstName, lastName);

, но класс Employee не имеет конструктора с двумя параметрами.Вам нужно передать третий параметр (почасовая ставка), например:

super(firstName, lastName, 42);
2 голосов
/ 01 декабря 2010

В вашем классе HourlyWorker вы вызываете конструктор Employee {super (имя, фамилия)} с двумя аргументами, но в классе Employee у вас нет конструкторов, которые принимают два аргумента.

2 голосов
/ 01 декабря 2010

В HourlyWorker вы звоните

super(firstName, lastName);

, но конструктор Employee равен

Employee(String, String, double)

Подписи не совпадают.

РЕДАКТИРОВАТЬ: Между прочимПочему у HourlyWorker есть приватный wage член?Чем он отличается (концептуально) от Employee.hourlyRate?

1 голос
/ 01 декабря 2010

Кроме того, если вы все еще хотите иметь конструктор типа

public Employee(String firstName, String lastName) { ... }

и вы знаете значение по умолчанию из вашего double hourlyRate, вы можете попробовать написать новый конструктор, подобный следующему:

`public Employee (String firstName, String lastName) {

     Employee(firstName, lastName, 0.0);

} `

1 голос
/ 01 декабря 2010

Вы вызываете конструктор базового класса HourlyEmployee (который является ctor сотрудника) с 2 аргументами вместо 3, которые он хочет.

Изменить строку в HourlyEmployee ctor с:

super(firstName, lastName);

до

super(firstName, lastName, hourlyWage);
1 голос
/ 01 декабря 2010

В вашем классе HourlyWorker у вас есть следующая строка кода:

super(firstName, lastName);

Но в вашем классе сотрудников нет соответствующего конструктора.По сути, компилятор ищет в вашем классе сотрудника что-то вроде ...

public Employee(String firstName, String lastName)
{
   ...
}

Определите новый конструктор или вызовите конструктор, который вы определили с параметрами, которые вам не хватает.

1 голос
/ 01 декабря 2010
Конструктор

HourlyWorker пытается вызвать super(firstName, lastName), но в родительском классе такой конструктор не объявлен.

1 голос
/ 01 декабря 2010

У вас нет супер-конструктора, который принимает только два аргумента.

0 голосов
/ 01 декабря 2010

Вокруг else if происходит что-то подозрительное.Это повторяется с другим if и отсутствующими фигурными скобками.Сделайте отступ в своем коде правильно и убедитесь, что открытые вьющиеся строки совпадают с закрывающими.

   if(hourlyRate > 0)
    {
      hourlyRate = hourlyRate;
        }
      //Otherwise prevent an hour rate greater than zero being overwritten 
        else if(hourlyRate <=0)
        {

   if(hourlyRate <= 0)
   {           
            hourlyRate = 0;
            }

  decorateConsole();

Кроме того, строки такого типа не будут работать должным образом (их три):

   firstName = firstName;

Это должно быть:

   this.firstName = firstName;

Как у вас во втором классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...