web-dev-qa-db-fra.com

ne remplace pas ou n'implémente pas une méthode à partir d'un supertype

Je crée une base de données fictive des employés en utilisant l'héritage et le polymorphisme. Je rencontre les erreurs suivantes lorsque j'essaie de remplacer les méthodes de superclasse.

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

Voici mon code de la superclasse des employés et de la sous-classe des employés horaires

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();
}

Voici la sous-classe 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;
}


}
11
user1678596

Votre classe Employee a 4 méthodes abstraites, dont aucune n'est implémentée (pas correctement du moins). Voici un exemple:

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

La classe parente doit contenir la même signature (qui inclut des paramètres) et doit ressembler à ceci:

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

Comme cela semble être un devoir, je vous laisse le reste.

12
nicholas.hauschild

Lisez attentivement le message d'erreur:

HourlyEmployee n'est pas abstrait et ne remplace pas la méthode abstraite resetWeek () dans Employee

Cela indique clairement que votre classe Employee est abstract et possède une méthode abstraite resetWeek().

Votre classe HourlyEmployee qui s'étend de Employee n'est pas abstraite, elle doit donc remplacer toutes les méthodes abstraites de la super classe, car une classe concrète ne peut pas avoir de méthodes abstraites.

La raison en est que vos méthodes dans la classe HourlyEmployee ont une signature différente de celles de la super classe. La méthode n'est donc pas remplacée et le @Override l'annotation n'est pas acceptée par le compilateur

3
Robin

comme votre classe HourlyEmployee * n'est pas abstraite * vous devez implémenter les méthodes abstraites déclarées dans votre résumé EMPLOYEE classe. ce qui est assez évident. vous devez implémenter les méthodes ci-dessous

 public abstract double caclulateWeeklyPay();

 public abstract void annualRaise();

 public abstract double holidayBonus();

 public abstract void resetWeek(); 
1
PermGenError