Подтвердить что ты не робот

Метод не отменяет или не реализует метод из супертипа

Я создаю макетную базу данных сотрудников с использованием наследования и полиморфизма. При попытке переопределить методы суперкласса я столкнулся с следующими ошибками.

HourlyEmployee is not abstract and does not override abstract method resetWeek() in Employee
public class HourlyEmployee extends Employee
   ^
HourlyEmployee.java:43: error: method does not override or implement a method from a supertype
@Override
^
HourlyEmployee.java:54: error: method does not override or implement a method from a supertype
@Override
^
HourlyEmployee.java:60: error: method does not override or implement a method from a supertype
@Override
^
HourlyEmployee.java:66: error: method does not override or implement a method from a supertype
@Override

Вот мой подкласс класса Employee и HourlyEmployee.

public abstract class Employee
{
protected String firstName;
protected String lastName;
protected char middleInitial;
protected boolean fulltime;
private char gender;
private int employeeNum;

public Employee (String fn, String ln, char m, char g, int empNum, boolean ft)
{
    firstName = fn;
    lastName = ln;
    middleInitial = m;
    gender = g;
    employeeNum = empNum;
    fulltime = ft;
}

public int getEmployeeNumber()
{
    return employeeNum;
}

public void setEmployeeNumber(int empNum)
{
    while (empNum <= 10000 && empNum >= 99999)
    {
        System.out.print ("Invalid input, please try again: ");
    }

    if (empNum >= 10000 && empNum <= 99999)
    {
        employeeNum = empNum;
    }
}

public String getFirstName()
{
    return firstName;
}

public String getLastName()
{
    return lastName;
}

public char checkGender(char g)
{
    if (g != 'M' || g != 'F')
    {
        g = 'F';
    }
    return g;
}

public char getGender()
{
    return gender;
}


@Override
public boolean equals(Object e2)
{
    if (this.employeeNum == ((Employee)e2).employeeNum)
    {
        return true;
    }
    else
    {
        return false;
    }
}

@Override
public String toString()
{
    return employeeNum + "\n" + lastName + ", " + firstName + "\n" + "Gender:" + gender + "\n" + "Status:" + fulltime + "\n";
}

public abstract double caclulateWeeklyPay();

public abstract void annualRaise();

public abstract double holidayBonus();

public abstract void resetWeek();
}

Вот подкласс HourlyEmployee

public class HourlyEmployee extends Employee
{
private double wage;
private double hoursWorked;
private double additionalHours;

public HourlyEmployee(String fn, String ln, char m, char g, int empNum, boolean ft, double w, double h, double ahours)
{
    super (fn, ln, m, g, empNum, ft);
    wage = w;
    hoursWorked = h;
    hoursWorked = 0.0;
    additionalHours = ahours;
}

@Override
public String toString()
{
    return this.getEmployeeNumber() + "\n" + lastName + ", " + firstName + middleInitial + "\n" + "Gender: "
     + this.getGender() + "\n" + "Status: " + fulltime + "\n" + "Wage: " + wage + "\n" + "Hours Worked: " + hoursWorked + "\n";
}

   //@Override    
public double calculateWeeklyPay(double w, double h)
{
    if (h > 40)
    {
        w = w * 2;
    }

    return w * h;        
}

//@Override
public double annualRaise(double w)
{
    return (w * .05) + w;
}

//@Override
public double holidayBonus(double w)
{
    return w * 40;
}

//@Override
public double resetWeek(double h)
{
    h = 0.0;
    return h;
}

public double plusHoursWorked(double h, double ahours)
{
    while (h <= 0)
    {
        System.out.println("Invalid value entered, please try again");
    }

    h += ahours;

    return h;
}


}
4b9b3361

Ответ 1

В вашем классе Employee есть 4 абстрактных метода, ни один из которых не реализован (по крайней мере, не так). Вот пример:

double caclulateWeeklyPay(); // in Employee
double calculateWeeklyPay(double w, double h) // in HourlyEmployee

Родительский класс должен содержать одну и ту же подпись (включая параметры), и должен выглядеть следующим образом:

public abstract double calculateWeeklyPay(double w, double h);

Поскольку это, кажется, домашнее задание, я оставлю вам остальное.

Ответ 2

Просто внимательно прочитайте сообщение об ошибке:

HourlyEmployee не является абстрактным и не отменяет абстрактный метод resetWeek() в Employee

Ясно, что ваш Employee класс abstract и имеет абстрактный метод resetWeek().

Ваш класс HourlyEmployee, который простирается от Employee, не является абстрактным, поэтому он должен переопределять все абстрактные методы суперкласса, поскольку конкретный класс не может иметь абстрактных методов.

Причина в том, что ваши методы в классе HourlyEmployee имеют другую подпись, чем в суперклассе. Таким образом, метод не переопределяется, и аннотация @Override не принимается компилятором

Ответ 3

поскольку ваш класс HourlyEmployee * не является абстрактным * вам нужно реализовать абстрактные методы, объявленные в абстрактном классе EMPLOYEE. что совершенно очевидно. вы должны реализовать следующие методы

 public abstract double caclulateWeeklyPay();

 public abstract void annualRaise();

 public abstract double holidayBonus();

 public abstract void resetWeek();